C C 筆記 0 題目彙總

2021-09-12 17:17:52 字數 3135 閱讀 4202

1、判斷『x』是小寫字母符的c表示式:

if

(』a』<=』x』<=』z』)

2、設有定義「char buffer[x]」,將字串「abcd」賦值給buffer的安全解語句是:
strcpy

(buffer,

"abcd"

);

wsprint

(buffer,

"abcd"

);

char

* p =

"abcd"

;strcpy

(buffer, p)

;

錯誤解:

char buffer[5]

; buffer =

"abcd"

;//賦值型別錯誤

/* buffer[5]是已經分配空間的

* 而「abcd」是乙個常量字串,他的位址是固定的

*/

我們可做如下實驗驗證上述問題

char

* a=

"abcd"

;char

* b=

"abcd"

;printf

("0x%p\n0x%p\n"

, a, b)

;;

此時a與b的值是相等的,即a與b指向了同乙個位址(a和b是一對相等的指標),即是說,在第一次定義「abcd」時,系統已經為該字串分配了乙個連續的位址空間,而「abcd」這樣乙個「表示式」指向了這個位址空間,所以在char* b = "abcd"時,只是將剛剛定義的位址賦值給了b指標而已。

3、linux32位c程式,請計算以下sizeof的值

char str=

"hellowo"

;char

* p = str;

int n =

strlen

(p);

答案:8;4;4

sizeof有兩種語法形式:

sizeof

(type_name)

;//sizeof(型別);

sizeof object;

//sizeof 物件;

sizeof計算物件的大小也是轉換成對物件型別的計算,即

sizeof p	//p為char*型別

sizeof

(p)sizeof

(char*)

sizeof

(int*)

sizeof

(int**

)

這5種寫法得出的sizeof大小均為指標變數的大小,在32位機器中指標變數的返回值為4,64位機器中為8,單位為位元組。

再看char str = "hellowo";雖然陣列長度為8,sizeof也為8,但實際上,sizeof並不能直接求陣列長度,一般求陣列長度用strlen,若用sizeof通常有如下兩種寫法:

int a =

sizeof

(str)

/sizeof

(char);

//用陣列總記憶體大小 除 陣列型別記憶體大小

int b =

sizeof

(str)

/sizeof

(str[0]

);//用陣列總記憶體大小 除 任意元素記憶體大小

擴充套件:結構體的sizeof

struct s1

;printf

("sizeof(s1) = %d\n"

,sizeof

(s1)

);

此時char佔1位元組,int佔4位元組,相加為5位元組,但輸出結果卻為8

我們先定義如下變數:

s1 s1 =

;

進入debug,當執行到變數定義後用gdb命令:x/8xb &s1檢視記憶體,可以得到:

->->post-prompt

0x70fe40: 0x61 0x00 0x00 0x00 0xff 0xff 0xff 0xff

在0x61與0xffffffff中間夾雜了三個0x00,這就是計算機的位元組對齊

結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;

結構體每個成員相對於結構體首位址的偏移量都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組;例如上面第二個結構體變數的位址空間。

結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。

附:gdb命令相關:

4、h標頭檔案中的ifndef/define/endif的作用?

#ifndef x	

//if (x is) not define

#define x

//如果x沒有被巨集定義過,定義x,並編譯程式段 1

#endif

//如果x已經定義,則編譯程式段2的語句

條件指示符#ifndef最主要目的是防止標頭檔案的重複包含和編譯。

條件編譯當然也可以用條件語句來實現。 但是用條件語句將會對整個源程式進行編譯,生成的目標程式程式很長。如果條件選擇的程式段很長,採用條件編譯的方法是十分必要的。

5、#include與#include"file.h"

標準規定,包含c++提供的標準標頭檔案或系統標頭檔案時應使用尖括號,包含自定義標頭檔案時可使用雙引號。

當使用<>包含標頭檔案時,編譯器將在系統目錄查詢

當使用""包含標頭檔案時,編譯器將按照「使用者目錄 - 安裝路徑 - 系統目錄」的順序查詢

7、巨集定義求陣列元素個數

#define tablen(table) (sizeof(table) / sizeof(table[0]))
8、定義:int a[3]=,則*(*a+1)+2)的值為:
在這裡插入**片

C C 筆記彙總

深入理解c 11 c 新特性解析 第1章 新標準的誕生 深入理解c 11 c 新特性解析 第2章 保證穩定性和相容性 測試 整理 深入理解c 11 c 新特性解析 第3章 通用為本 專用為末 測試 整理 深入理解c 11 c 新特性解析 第4章 新手易學 老手易用 測試 整理 深入理解c 11 c ...

C C 學習筆記 01 題目

知識點抄筆記 1 寫出float x 與 零值 比較的if語句。if x 0.000001 x 0.000001 2 已知乙個陣列table,用乙個巨集定義,求出資料的元素個數。define ntbl sizeof table sizeof table 0 3 對 1.2345 取整是多少?4 寫一...

C C 筆試 面試題目大彙總 二)

16.關聯 聚合 aggregation 以及組合 composition 的區別?涉及到uml中的一些概念 關聯是表示兩個類的一般性聯絡,比如 學生 和 老師 就是一種關聯關係 聚合表示has a的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係 500 ...