C語言經典面試題

 


 

【題目】零值比較--BOOL,int,float,指針變量與零值比較的if語句。c++

(首先給個提示:題目中要求的是零值比較,而非與0進行比較,在C++裏「零值」的範圍可就大了,能夠是0, 0.0 , FALSE或者「空指針」。)數組

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

if ( n == 0 ) if ( n != 0 )
以下寫法均屬不良風格.
if ( n ) // 會讓人誤解 n 是布爾變量 if ( !n )

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

if ( flag ) if ( !flag ) 以下寫法均屬不良風格。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0)

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

千萬要留意,不管是float 仍是double 類型的變量,都有精度限制,都不能夠用「==」或「!=」與任何數字比較,應該設法轉化成「>=」或「<=」形式。
假設浮點變量的名字爲x;code

其中EPSINON 是容許的偏差(即精度)。blog

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() { char aa[10]; printf(「%d」,strlen(aa)); } 

【答案】
sizeof()和初不初始化,沒有關係;
strlen()和初始化有關,打印結果值未知。


 

【題目】頭文件中的ifndef/define/endif 幹什麼用?

【答案】

防止該頭文件被重複引用。


 

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

【答案】
對於#include <filename.h> ,編譯器從標準庫路徑開始搜索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

相關文章
相關標籤/搜索