當前位置:才華齋>計算機>C語言>

2017計算機等考二級《C語言》常考問題

C語言 閱讀(9.27K)

為了提高大家複習計算機二級考試的效率,本站小編搜尋整理了計算機等考二級《C語言常考問題,希望對大家有所幫助。

2017計算機等考二級《C語言》常考問題

  第1 章 宣告和初始化

問題:

1.1 我如何決定使用那種整數型別?

1.2 64 位機上的64 位型別是什麼樣的?

1.3 怎樣定義和宣告全域性變數和函式最好?

1.4 extern 在函式宣告中是什麼意思?

1.5 關鍵字auto 到底有什麼用途?

1.6 我似乎不能成功定義一個連結串列。我試過typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是編譯器報了錯誤資訊。難道在C語言中一個結構不能包含指向自己的指標嗎?

1.7 怎樣建立和理解非常複雜的宣告?例如定義一個包含N 個指向返回指向字元的指標的函式的指標的陣列?

1.8 函式只定義了一次, 呼叫了一次, 但編譯器提示非法重定義了。

1.9 main() 的正確定義是什麼?void main() 正確嗎?

1.10 對於沒有初始化的變數的初始值可以作怎樣的假定?如果一個全域性變數初始值為“零”, 它可否作為空指標或浮點零?

1.11 程式碼int f() { char a[] = "Hello, world!";} 不能編譯。

1.12 這樣的初始化有什麼問題?char *p = malloc(10); 編譯器提示“非法初始式” 云云。

1.13 以下的初始化有什麼區別?

  第2 章 結構、聯合和列舉

問題列表

2.1 宣告struct x1 { ... }; 和typedef struct { ... } x2; 有什麼不同?

2.2 為什麼struct x { ... }; x thestruct; 不對?

2.3 一個結構可以包含指向自己的指標嗎?

2.4 在C 語言中實現抽象資料型別什麼方法最好?

2.5 在C 中是否有模擬繼承等面向物件程式設計特性的好方法?

2.6 我遇到這樣宣告結構的程式碼: struct name { int namelen; char namestr[1];}; 然後又使用一些記憶體分配技巧使namestr 陣列用起來好像有多個元素。這樣合法和可移植嗎?

2.7 是否有自動比較結構的方法?

2.8 如何向接受結構引數的函式傳入常數值?

2.9 怎樣從/向資料檔案讀/寫結構?

2.10 我的編譯器在結構中留下了空洞, 這導致空間浪費而且無法與外部資料檔案進行”二進位制” 讀寫。能否關掉填充, 或者控制結構域的對齊方式?

2.11 為什麼sizeof 返回的值大於結構的期望值, 是不是尾部有填充?

2.12 如何確定域在結構中的位元組偏移?

2.13 怎樣在執行時用名字訪問結構中的域?

2.14 程式執行正確, 但退出時卻“core dump” 了,怎麼回事?

2.15 可以初始化一個聯合嗎?

2.16 列舉和一組預處理的#define 有什麼不同?

2.17 有什麼容易的顯示列舉值符號的方法?

  第 3 章 表示式

問題列表:

3.1 為什麼這樣的程式碼: a[i] = i++; 不能工作?

3.2 使用我的編譯器,下面的程式碼int i=7; printf("%dn", i++ * i++); 返回49?不管按什麼順序計算, 難道不該打印出56嗎?

3.3 對於程式碼int i = 3; i = i++; 不同編譯器給出不同的結果, 有的為3, 有的為4, 哪個是正確的?

3.4 這是個巧妙的表示式: a.=b.=a.=b 它不需要臨時變數就可以交換a 和b 的值。

3.5 我可否用括號來強制執行我所需要的計算順序?

3.6 可是&& 和|| 運算子呢?

3.7 我怎樣才能理解複雜表示式?“序列點” 是什麼?

3.8 那麼, 對於a[i] = i++; 我們不知道a[] 的哪一個分量會被改寫,但i的確會增加1, 對嗎?

3.9 ++i 和i++ 有什麼區別?

3.10 如果我不使用表示式的值, 我應該用++i 或i++ 來自增一個變數嗎?

3.11 為什麼如下的程式碼int a = 100, b = 100; long int c = a * b; 不能工作?

3.12 我需要根據條件把一個複雜的表示式賦值給兩個變數中的一個。

  第 4 章 指標

問題列表:

4.1 我想宣告一個指標併為它分配一些空間, 但卻不行。這些程式碼有什麼問題?char *p; *p = malloc(10);

4.2 *p++ 自增p 還是p 所指向的變數?

4.3 我有一個char * 型指標正巧指向一些int 型變數, 我想跳過它們。

為什麼如下的程式碼((int *)p)++; 不行?

4.4 我有個函式,它應該接受並初始化一個指標void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是當我如下呼叫時: int *ip; f(ip); 呼叫者的指標卻沒有任何變化。

4.5 我能否用void** 指標作為引數, 使函式按引用接受一般指標?

4.6 我有一個函式extern int f(int *); 它接受指向int 型的指標。我怎樣用引用方式傳入一個常數?

4.7 C 有“按引用傳遞” 嗎?

4.8 我看到了用指標呼叫函式的不同語法形式。到底怎麼回事?

4.9 我怎樣把一個int 變數轉換為char * 型?

  第 5 章 空(null) 指標

問題列表:

5.1 臭名昭著的空指標到底是什麼?

5.2 怎樣在程式裡獲得一個空指標?

5.3 用縮寫的指標比較“if(p)” 檢查空指標是否可靠?如果空指標的內部表達不是0 會怎麼樣?

5.4 NULL 是什麼, 它是怎麼定義的?

5.5 在使用非全零作為空指標內部表達的`機器上, NULL 是如何定義的?

5.6 如果NULL 定義成#define NULL ((char *)0) 難道不就可以向函式傳入不加轉換的NULL 了嗎?

5.7 如果NULL 和0 作為空指標常數是等價的, 那我到底該用哪一個呢?

5.8 但是如果NULL 的值改變了, 比如在使用非零內部空指標的機器上, 難道用NULL ( 而不是0) 不是更好嗎?

5.9 用預定義巨集#define Nullptr(type) (type *)0 幫助建立正確型別的空指標。

5.10 這有點奇怪。NULL 可以確保是0, 但空(null) 指標卻不一定?

5.11 為什麼有那麼多關於空指標的疑惑?為什麼這些問題如此經常地出現?

5.12 我很困惑。我就是不能理解這些空指標一類的東西。

5.13 考慮到有關空指標的所有這些困惑, 難道把要求它們內部表達都必須為0 不是更簡單嗎?

5.14 說真的, 真有機器用非零空指標嗎, 或者不同型別用不同的表達?

5.15 執行時的“空指標賦值” 錯誤是什麼意思?

char a[] = "string literal"; char *p = "string literal"; 當我向p[i] 賦值的時候, 我的程式崩潰了。

1.14 我總算弄清除函式指標的宣告方法了, 但怎樣才能初始化呢?