有意思的幾道C 題目

來源:互聯網
上載者:User

今天去一家公司參加了筆試,個人感覺有幾道題挺有意思的,拿出來和大家分享一下:

1、

void main(){unsigned char i =0;char a[1024] ={0};for(i = 0;i<1024;i++){printf("a[%d]:0x%02x\n",i,a[i]);}}

輸出結果是什嗎?

答案應該是:1、死迴圈,然後是

a[0]:0x00

a[1]:0x00

a[2]:0x00

……

 

a[255]:0x00

 

注意i的類型,i的最大值是255,所以會一直迴圈下去。

 

2、

void main(){int a =0;a|=(0x01<<4);printf("%d\n",a);//a=16;a&=~(0x01<<4);printf("%d\n",a);//a=0;}

大家可以自己算一下。

3、

void main(){int a =1;printf("%d\n",*((unsigned char *)&a));//output is 1a=0x12345678;printf("%d\n",*((unsigned char *)&a+1));//output is 86}

第二輸出來是86,現在還沒想清楚。

 

4、 

void function1(char*a){printf("%d\n",strlen(a));}void function2(char*a){printf("%d\n",sizeof(a));}void main(){char a[100] ={0};//0 is '\0' function1(a);// 0 is '\0' ,so strlen(a) is 0;function2(a);// pointer length is 4 bytes;}

function1列印出來是0,因為a[100]全部初始化為0,0即是'\0'。

function2列印出來的是4,是指標類型的長度。

5、

void main(){char a[8] ={"hello"};char b[8]={0};printf("a:0x%08x\n",a);strcpy(b,"01234567");printf("a:%s\n",a);printf("b:%s\n",b);}

結果是:
a:0xbfc2dccc
a:
b:01234567
還沒想清楚。

 

6、

unsigned int a = 10;//unsigned的時候最高位並不是用來表示正負。int b =-100;//int的時  最高位的1是代表負數if(a+b >10)//a+b是全部轉換成 unsigned類型才加的,所以>10printf(">10\n");elseprintf("<10\n");

列印出">10"。

 

7、

void main(){char a[10]; printf("%d\n",strlen(a) );}

列印出並不是10,因為strlen(a)時是要找到'\0'  就結束的,我們並不知道a[10]的結束標記'\0'在哪裡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.