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

c語言常見筆試題總結

C語言 閱讀(2.97W)

引導語:C語言之所以命名為C,是因為 C語言源自Ken Thompson發明的B語言,而 B語言則源自BCPL語言。以下是小編整理的c語言常見筆試題總結,歡迎參考閱讀!

c語言常見筆試題總結

【1 使用巨集】

1.1 #error的作用?

#error用於向編譯器報錯,並輸出它後面帶的錯誤資訊。例如:

#ifndef SOMETHING

#error SOMETHING not defined!

#endif

如果在這段程式碼之前未定義過SOMETHING,則在編譯時出錯,並給出"SOMETHING not defined!"的錯誤資訊。

1.2 定義一個巨集,求出給定陣列中的元素的個數 #define NELEMENTS(array) (sizeof(array) / sizeof((array)[0]))

【2 資料宣告和定義】

給定以下型別的`變數a的定義式:

a) An integer

int a;

b) A pointer to an integer

int *a;

c) A pointer to a pointer to an integer

int **a;

d) An array of 10 integers

int a[10];

e) An array of 10 pointers to integers

int *a[10];

f) A pointer to an array of 10 integers

int (*a)[10];

g) A pointer to a function that takes an integer as an argument and returns an integer int (*a)(int );

h) An array of ten pointers to functions that take an integer argument and return an integer int (*a[10] ) (int );

【3 複雜型別(1)】

有如下表達式:

char (*(*x())[])();

請用文字描述x是什麼。 首先,確定識別符號:x

x是一個函式,沒有引數:x()

返回值是一個指標:*x()

這個指標指向一個數組:(*x())[]

陣列中的每個元素是指標:*(*x())[]

指向一個不帶引數的函式:(*(*x())[])()

函式的返回值是char:char (*(*x())[])()

這裡,要知道*、()和[]的優先順序

【5 標頭檔案】

問:為什麼標準標頭檔案都有類似以下的結構?

#ifndef __INCvxWorksh

#define __INCvxWorksh #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif #endif

在編譯原始檔時,C編譯器和C++編譯器都會對符號(函式或變數)名作某些修正,但兩者採用的修正方法不同,所以兩者生成的目標檔案不能互相連結。在C+ +中使用extern "C"可以讓C++符號獲得C連結特性。由於C++編譯器會自動定義__cplusplus巨集,所以在C語言標頭檔案中採用這種結構可以保證無論使用何種編譯器,生成的目標檔案都具有C連結特性,能夠與標準C編譯器所生成的目標檔案相連結

【6 static關鍵字】

請說出static關鍵字的3種用處:

(1)用於全域性變數;外部靜態變數,只能在本原始檔中被引用,不能被其它原始檔所引用。

(2)用於區域性變數;區域性靜態變數,在函式返回後儲存單元不釋放;下一次呼叫該函式時,該變數為上次函式返回時的值。

(3)用於函式。內部函式,只能被本原始檔中的函式所呼叫,不能被其它原始檔呼叫。 /* file.c */

static int a;

int b;

static int fn()

{

static int x;

int y;

}

【7 const關鍵字】

7.1 const關鍵字的意義是什麼?

7.2 解釋以下的變數定義: const int a1; a1是整型常量。

int const a2; a2是整型常量。等同於const int a2。

const int *a3; a3是指標(a3是可變的),指向一個整型常量。等同於int const *a3。 int * const a4; a4是常量指標(a4不可變),指向一個整型變數。

int const * const a5; a5是常量指標(a5不可變),指向一個整型常量。等同於const int * const a5。

【8 volatile關鍵字】

8.1 volatile意義?

volatile int *p;

8.2 volatile能和const一起使用嗎?

const關鍵字的意思是限制程式設計者自己不能修改變數的值;兩者並不矛盾。

例如一個記憶體對映的、只讀的硬體暫存器,假設它的地址是p,則可以這樣宣告:

volatile const UINT32 *p;