您的位置:首页 > 其它

有意思的几道C 题目

2012-02-23 23:54 501 查看
今天去一家公司参加了笔试,个人感觉有几道题挺有意思的,拿出来和大家分享一下:

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'在哪里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: