有意思的幾道C 題目

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

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 1
	a=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類型才加的,所以>10
		printf(">10\n");
	else
		printf("<10\n");


打印出">10"。

 

7、

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章