C語言經典面試題!快來測一測你的基礎語法扎不扎實,你能做出幾題?


一、請填寫 bool , float,  指針變量  與“零值”比較的 if  語句。

提示:這里“零值”可以是 0, 0.0 , FALSE 或者“空指針” 。例如 int  變量 n  與“零值”比較的 if  語句為:

if ( n == 0 )

if ( n != 0 ) \

以此類推。 

(1)請寫出 bool  flag  與“零值”比較的 if  語句:

【標准答案】if ( flag )    if ( !flag )

(2)請寫出 float  x  與“零值”比較的 if  語句:

【標准答案】 const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON);不可將浮點變量用“==”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。

(3)請寫出 char  *p  與“零值”比較的 if  語句:

【標准答案】 if (p == NULL)    if (p != NULL)

 

二、以下為 Linux下的 32 位 C程序,請計算  sizeof 的值。                                                                                         

char  str[] = “Hello” ;                                                   

char   *p = str ;                                                          

  int     n = 10;    

請計算:                                                 

(1)sizeof (str ) =

(2)sizeof ( p ) =

(3)sizeof ( n ) =

(4)

void Func ( char str[100])                                            

  {                                                                                                            

     ……    ;                                                                    

  }                                                                                        

請計算:sizeof( str ) =                                                                                       

(5)void *p = malloc( 100 );

請計算:sizeof ( p ) =

【標准答案】(1)6、(2)4、(3)4、(4)4、(5)4

 

三、 long a=0x801010; a+5=?

【標准答案】0x801010用二進制表示為:“1000 0000 0001 0000 0001 0000”,十進制的值為8392720,再加上5就是8392725。

 

四、設有以下說明和定義: 

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));的執行結果是:___

【標准答案】DATE是一個union, 變量公用空間. 里面最大的變量類型是int[5], 占用20個字節。所以它的大小是20 data是一個struct,每個變量分開占用空間。依次為int4 + DATE20 + double8 = 32。所以結果是 20 + 32 = 52。

 

五、請問以下代碼有什么問題:

 int main()

 {

     char a;

     char *str=&a;

         strcpy(str,"hello");

         printf(str);

     return 0;

 }

【標准答案】沒有為str分配內存空間,將會發生異常 問題出在將一個字符串復制進一個字符變量指針所指地址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程序崩潰。

 

六、請問以下代碼有什么問題:

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可以。

 

八、寫出輸出結果

int main()

{

    int a[5]={1,2,3,4,5};

    int *ptr=(int *)(&a+1);

    printf("%d,%d",*(a+1),*(ptr-1));

}

 

 

九、 

char szstr[10]; strcpy(szstr,"0123456789"); 產生什么結果?為什么?

【標准答案】長度不一樣,出現段錯誤。

 

十、

int a=248;

b=4;

int const c=21;

const int *d=&a;

int *const e=&b;

int const *f const =&a;

請問上述表達式哪些會被編譯器禁止?為什么?

 

十一、 

void main()

 {

     char aa[10];

     printf(“%d”,strlen(aa));

 } 

會出現什么問題?打印結果是是多少?

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

 

十二、

給定結構struct  A { char t:4; char k:4; unsigned short i:8; unsigned long m; };

問sizeof(A) = ?

【標准答案】8

 

十三、

struct name1

{

    char str;

    short x;

    int num;

 };

求sizeof(name1)?

【標准答案】8

 

十四、

struct name2

{

    char str;

    int num;

    short x;

 };

求sizeof(name2)?

【標准答案】12

 

十五、程序哪里有錯誤?

wap( int* p1,int* p2 )

{

    int *p;

    *p = *p1;

    *p1 = *p2;

    *p2 = *p;

}

【標准答案】p為野指針

 

十六、什么是預編譯,何時需要預編譯?

預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的 指令,比如拷貝#include 包含的文件代碼,#define 宏定義的替換,條件 編譯等,就是為編譯做的預備工作的階段,主要處理#開始的預編譯 指令,預編譯指令指示了在程序正式編譯前就由編譯器進行的操作, 可以放在程序中的任何位置。

c 編譯系統在對程序進行通常的編譯之前,先進行預處理。c 提供的 預處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編 譯

 

十七、 (void *)ptr 和 (*(void**))ptr的結果是否相同?其中ptr為同一個指針。

【標准答案】(void *)ptr 和 (*(void**))ptr值是相同的

 

十八、要對絕對地址0x100000賦值,我們可以用 (unsigned int*)0x100000 = 1234; 那么要是想讓程序跳轉到絕對地址是0x100000去執行,應該怎么做?

【標准答案】*((void (*)( ))0x100000 ) ( ); 首先要將0x100000強制轉換成函數指針,即: (void (*)())0x100000,然后再調用它: *((void (*)())0x100000)();

 

十九、 int a,b,c 請寫函數實現c=a+b ,不可以改變數據類型,如將c改為long int,關鍵是如何處理溢出問題?

【標准答案】

bool add (int a, int b,int *c)

 {

    *c=a+b;

    return (a>0 && b>0 &&(*ca || *c>b)));

 }

————————————————

今天的學習就到此結束,如果你想學習更多編程知識,歡迎關注我~

- End -

————————————————

不管你是轉行也好,初學也罷,進階也可,如果你想學編程,進階程序員

【值得關注】我的 編程學習交流俱樂部【點擊進入】

————————————————

編程入門資料(網盤鏈接免費分享):


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM