c语言面试找错题.docx
- 文档编号:26419118
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:6
- 大小:15.32KB
c语言面试找错题.docx
《c语言面试找错题.docx》由会员分享,可在线阅读,更多相关《c语言面试找错题.docx(6页珍藏版)》请在冰豆网上搜索。
c语言面试找错题
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+b6)?
puts(6):
puts(=6
}
这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。
不管如何,这无符号整型问题的答案是输出是6。
原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。
这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
如果你答错了这个问题,你也就到了得不到这份工作的边缘。
3、请找出下面代码中的所以错误
说明:
以下代码是把一个字符串倒序,如abcd倒序后变为dcba
1、#includestring.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\n,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;jj++)
for(i=0;ii++)
a[i][j][k]=0;
答案:
把循环语句内外换一下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 面试 找错