c语言面试找错题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言面试找错题
1、c语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
inta=5,b=7,c;
c=a+++b;
这个问题将做为这个测验的一个愉快的结尾。
不管你相不相信,上面的例子是完全合乎语法的。
问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。
因此,上面的代码被处理成:
c=a+++b;
因此,这段代码持行后a=6,b=7,c=12。
如果你知道*,或猜出正确*,做得好。
如果你不知道*,我也不把这个当作问题。
我发现这个问题的最大好处是这是一个关于代码编写风格,代码的可读*,代码的可修改*的好的话题。
2、下面的代码输出是什么,为什么?
voidfoo(void)
{
unsignedinta=6;
intb=-20;
(a+b>6)?puts(">6"):puts("<=6");
}
这个问题测试你是否懂得c语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。
不管如何,这无符号整型问题的*是输出是">6"。
原因是当表达式中存在有符号类型和无符号类型时所有的*作数都自动转换为无符号类型。
因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。
这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
如果你答错了这个问题,你也就到了得不到这份工作的边缘。
3、请找出下面代码中的所以错误
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
1、#include"string.h"
2、main()
3、{
4、char*src="hello,world";
5、char*dest=null;
6、intlen=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、return0;
14、}
答:
方法1:
intmain(){
char*src="hello,world";
intlen=strlen(src);
char*dest=(char*)malloc(len+1);//要为\\0分配一个空间
char*d=dest;
char*s=&src[len-1];//指向最后一个字符
while(len--!=0)
*d++=*s--;
*d=0;//尾部要加\\0
printf("%s\",dest);
free(dest);//使用完,应当释放空间,以免造成内存汇泄露
return0;
}
方法2:
#include
#include
main()
{
charstr[]="hello,world"; intlen=strlen(str);
chart;
for(inti=0;i
{
t=str[i];
str[i]=str[len-i-1];str[len-i-1]=t; }
printf("%s",str);
return0;
}
4、请问下面程序有什么错误? inta[60][250][1000],i,j,k;
for(k=0;k<=1000;k++)
for(j=0;j<250;j++)
for(i=0;i<60;i++)
a[i][j][k]=0;
*:把循环语句内外换一下。