c面試題總結(含答案)

來源:果殼範文吧 2.56W

4. static有什麼用途?(請至少説明兩種)

c面試題總結(含答案)

1.限制變量的作用域

2.設置變量的存儲域

7. 引用與指針有什麼區別?

1) 引用必須被初始化,指針不必。

2) 引用初始化以後不能被改變,指針可以改變所指的對象。

2) 不存在指向空值的引用,但是存在指向空值的指針。

8. 描述實時系統的基本特性

在特定時間內完成特定的任務,實時性與可靠性

9. 全局變量和局部變量在內存中是否有區別?如果有,是什麼區別?

全局變量儲存在靜態數據庫,局部變量在堆棧

10. 什麼是平衡二叉樹?

左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對值不大於1

11. 堆棧溢出一般是由什麼原因導致的?

沒有回收垃圾資源

12. 什麼函數不能聲明為虛函數?

constructor

13. 冒泡排序算法的時間複雜度是什麼?

O(n^2)

14. 寫出float x 與“零值”比較的if語句。

if(x>0.000001&&x<-0.000001)

16. Internet採用哪種網絡協議?該協議的主要層次結構?

tcp/ip 應用層/傳輸層/網絡層/數據鏈路層/物理層

17. Internet物理地址和Ip地址轉換採用什麼協議?

ARp (Address Resolution protocol)(地址解析)

地址的編碼分為哪倆部分?

Ip地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與上之後才能區

分哪些是網絡位哪些是主機位。

2.用户輸入M,N值,從1至N開始順序循環數數,每數到M輸出該數值,直至全部輸出。寫

STYLE="color: rgb(255, 0, 0);" 出C程序。

循環鏈表,用取餘操作做

3.不能做switch()的參數類型是:

switch的參數不能為實型。

1、局部變量能否和全局變量重名?

答:能,局部會屏蔽全局。要用全局變量,需要使用"::"

局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而

不會用到全局變量。對於有些編譯器而言,在同一個函數內可以定義多個同名的局部變

量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那

個循環體內

2、如何引用一個已經定義過的全局變量?

答:extern

可以用引用頭文件的.方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個

STYLE="color: rgb(255, 0, 0);" 在頭文件中聲明的全局變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你

STYLE="color: rgb(255, 0, 0);" 用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連接期

STYLE="color: rgb(255, 0, 0);" 間報錯

3、全局變量可不可以定義在可被多個.C文件包含的頭文件中?為什麼?

答:可以,在不同的C文件中以static形式來聲明同名全局變量。

可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦

初值,此時連接不會出錯

4、語句for( ;1 ;)有什麼問題?它是什麼意思?

答:和while(1)相同。

5、do……while和while……do有什麼區別?

答:前一個循環一遍再判斷,後一個判斷以後再循環

6、請寫出下列代碼的輸出內容

STYLE="color: rgb(255, 0, 0);" #include

STYLE="color: rgb(255, 0, 0);" main()

STYLE="color: rgb(255, 0, 0);" {

STYLE="color: rgb(255, 0, 0);" int a,b,c,d;

STYLE="color: rgb(255, 0, 0);" a=10;

STYLE="color: rgb(255, 0, 0);" b=a++;

STYLE="color: rgb(255, 0, 0);" c=++a;

STYLE="color: rgb(255, 0, 0);" d=10*a++;

STYLE="color: rgb(255, 0, 0);" printf("b,c,d:%d,%d,%d",b,c,d);

STYLE="color: rgb(255, 0, 0);" return 0;

STYLE="color: rgb(255, 0, 0);" }

STYLE="color: rgb(255, 0, 0);" 答:10,12,120

1、static全局變量與普通的全局變量有什麼區別?static局部變量和普通局部變量有什

麼區別?static函數與普通函數有什麼區別?

全局變量(外部變量)的説明之前再冠以static 就構成了靜態的全局變量。全局變量本身

就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。這兩者在存儲方式上並無不

同。這兩者的區別雖在於非靜態全局變量的作用域是整個源程序,當一個源程序由多個

源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制

了其作用域, 即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使

用它。由於靜態全局變量的作用域侷限於一個源文件內,只能為該源文件內的函數公

用,因此可以避免在其它源文件中引起錯誤。

從以上分析可以看出, 把局部變量改變為靜態變量後是改變了它的存儲方式即改變了它

的生存期。把全局變量改變為靜態變量後是改變了它的作用域, 限制了它的使用範圍。

static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該説

明為內部函數(static),內部函數應該在當前源文件中説明和定義。對於可在當前源文

件以外使用的函數,應該在一個頭文件中説明,要使用這些函數的源文件要包含這個頭

文件

static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在

其他文件單元中被引用;

static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次

依據上一次結果值;

static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被

STYLE="color: rgb(255, 0, 0);" 調用中維持一份拷貝

2、程序的局部變量存在於(堆棧)中,全局變量存在於(靜態區 )中,動態申請數據

存在於( 堆)中。

3、設有以下説明和定義:

typedef union {long i; int k[5]; char c;} DATE;

struct data { int cat; DATE cow; double dog;} too;

DATE max;

則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:___52____

答:DATE是一個union, 變量公用空間. 裏面最大的變量類型是int[5], 佔用20個字節.

所以它的大小是20

data是一個struct, 每個變量分開佔用空間. 依次為int4 + DATE20 + double8 = 32.

所以結果是 20 + 32 = 52.

當然...在某些16位編輯器下, int可能是2字節,那麼結果是 int2 + DATE10 + double8

= 20

4、隊列和棧有什麼區別?

隊列先進先出,棧後進先出

5、寫出下列代碼的輸出內容

#include

STYLE="color: rgb(255, 0, 0);" int inc(int a)

STYLE="color: rgb(255, 0, 0);" {

STYLE="color: rgb(255, 0, 0);" return(++a);

STYLE="color: rgb(255, 0, 0);" }

STYLE="color: rgb(255, 0, 0);" int multi(int*a,int*b,int*c)

STYLE="color: rgb(255, 0, 0);" {

STYLE="color: rgb(255, 0, 0);" return(*c=*a**b);

STYLE="color: rgb(255, 0, 0);" }

STYLE="color: rgb(255, 0, 0);" typedef int(FUNC1)(int in);

STYLE="color: rgb(255, 0, 0);" typedef int(FUNC2) (int*,int*,int*);

STYLE="color: rgb(255, 0, 0);" void show(FUNC2 fun,int arg1, int*arg2)

STYLE="color: rgb(255, 0, 0);" {

STYLE="color: rgb(255, 0, 0);" INCp=&inc;

STYLE="color: rgb(255, 0, 0);" int temp =p(arg1);

STYLE="color: rgb(255, 0, 0);" fun(&temp,&arg1, arg2);

STYLE="color: rgb(255, 0, 0);" printf("%dn",*arg2);

STYLE="color: rgb(255, 0, 0);" }

STYLE="color: rgb(255, 0, 0);" main()

STYLE="color: rgb(255, 0, 0);" {

STYLE="color: rgb(255, 0, 0);" int a;

STYLE="color: rgb(255, 0, 0);" show(multi,10,&a);

STYLE="color: rgb(255, 0, 0);" return 0;

STYLE="color: rgb(255, 0, 0);" }

STYLE="color: rgb(255, 0, 0);" 答:110

7、請找出下面代碼中的所以錯誤

説明:以下代碼是把一個字符串倒序,如“abcd”倒序後變為“dcba”

1、#include"string.h"

2、main()

3、{

4、 char*src="hello,world";

5、 char* dest=NULL;

6、 int len=strlen(src);

7、 dest=(char*)malloc(len);

8、 char* d=dest;

9、 char* s=src[len];

10、 while(len--!=0)

11、 d++=s--;

12、 printf("%s",dest);

13、 return 0;

14、}

答:

方法1:

int main(){

char* src = "hello,world";

int len = strlen(src);

char* dest = (char*)malloc(len+1);//要為