C語言經典面試題

2022-08-01 19:48:10 字數 2970 閱讀 6557

【題目】零值比較--bool,int,float,指標變數與零值比較的if語句。

(1)int型變數 n 與「零值」比較的 if 語句就是:

if ( n == 0

)if ( n != 0

)如下寫法均屬不良風格.

if ( n ) //

會讓人誤解 n 是布林變數

if ( !n )

(2)請寫出bool flag與「零值」比較的if語句:

if

( flag )

if ( !flag )

如下寫法均屬不良風格。

if (flag ==true)

if (flag == 1

) if (flag ==false)

if (flag == 0)

(3)請寫出 float x與「零值」比較的if語句。

千萬要留意,無論是float 還是double 型別的變數,都有精度限制,都不可以用「==」或「!=」與任何數字比較,應該設法轉化成「>=」或「<=」形式。

假設浮點變數的名字為x;

其中epsinon 是允許的誤差(即精度)。

const

float epsinon = 0.00001

;if ((x >= - epsinon) && (x <=epsinon)

如下是錯誤的寫法。

if (x == 0.0

) if (x != 0.0)

(4)請寫出 char *p 與「零值」比較的 if 語句。

if (p ==null)

if (p !=null)

如下寫法均屬不良風格。

if (p == 0) //

容易讓人誤解p是整型變數

if (p != 0

) if (p) //

容易讓人誤解p是bool型變數

if (!p)

【題目】以下為linux下的32 位c 程式,請計算sizeof的值。

char  str =「hello」 ;                               

char *p =str ;

i nt n = 10;

請計算(1)sizeof (str ) =

(2)sizeof ( p ) =

(3)sizeof ( n ) =

答案:6 ,  4 ,   4

【題目】用變數a 給出下面的定義

(e) 乙個有10個指標的陣列,該指標是指向乙個整型數的;

(f) 乙個指向有10個整型數陣列的指標;

(g) 乙個指向函式的指標,該函式有乙個整型引數並返回乙個整型數;

(h) 乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整型引數並返回乙個整型數;

【標準答案】

(e)int * a[10];

(f)int (*a)[10]

(g)int (*a)(int);

(h) int (*a[10])(int)

【題目】請問以下**有什麼問題:

char* s="aaa";

printf("%s",s);

s[0]='b';

printf("%s",s);

有什麼錯?

【答案】

"aaa" 是字串常量。s是指標,指向這個字串常量,所以宣告s的時候就有問題。

cosnt char* s="aaa";

然後又因為是常量,所以對是s[0] 的賦值操作是不合法的。

【題目】c和c++ 中的struct有什麼不同?

【答案】

c和c++ 中struct的主要區別是c中的struct不可以含有成員函式,而c++ 中的struct可以。c++ 中

struct和class的主要區別在於預設的訪問許可權不同,struct預設為public ,而class預設為private;

【題目】 以下會出現什麼問題?列印結果是是多少?

void

main()

【答案】

sizeof()和初不初始化,沒有關係;

strlen()和初始化有關,列印結果值未知。

【題目】標頭檔案中的ifndef/define/endif 幹什麼用?

【答案】

防止該標頭檔案被重複引用。

【題目】#include 和#include 「filename.h」有什麼區別?

【答案】

對於#include ,編譯器從標準庫路徑開始搜尋filename.h ;

對於#include 「filename.h」,編譯器從使用者的工作路徑開始搜尋filename.h 。

【題目】const有什麼用途?(請至少說明兩種)

【答案】:

(1)可以定義const 常量

(2)const 可以修飾函式的引數、返回值,甚至函式的定義體。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

【題目】如何引用乙個已經定義過的全域性變數?

【答案】可以用引用標頭檔案的方式,也可以用extern 關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個變數寫錯了,那麼在編譯期間會報錯,如果你用extern 方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯。

【題目】用預處理指令#define 宣告乙個常數,用以表明1年中有多少秒(忽略閏年問題)

【答案】

#define seconds_per_year (60 * 60 * 24 * 365)ul

經典C語言面試題

1.gets 函式 問 請找出下面 裡的問題 include intmain void 答 上面 裡的問題在於函式gets 的使用,這個函式從stdin接收乙個字串而不檢查它所複製的快取的容積,這可能會導致快取溢位。這裡推薦使用標準函式fgets 代替。2.strcpy 函式 問 下面是乙個簡單的密...

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...

C 經典面試題

1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...