LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: zywwzy

我今天为招聘新员工出的C语言考题

[复制链接]
发表于 2009-10-10 17:57:20 | 显示全部楼层
我用VC6编译结果也是.24,32,48
library兄说的没错,答案不唯一
回复 支持 反对

使用道具 举报

发表于 2009-10-12 09:39:45 | 显示全部楼层
Post by zywwzy;257040
这道题主要是考大家的C语言功底。
答案明显不是想象中的
var1=24,var2=32,var3=48

答案就是想像中的东西:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2009-10-15 11:22:35 | 显示全部楼层
怎么说呢?楼主有点自作聪明。
至少我从理论和实践都表明答案就是24,32,48。
而且,楼主看到了,我的cc都是一切缺省参数。没有附加任何选项。
我的平台:ubuntu 8.04.3, gcc 4.2.4
  1. poet:/tmp$ cat 1.c
  2. int main(void)
  3. {
  4. int var1=0;
  5. char var2=0;
  6. int var3=0;
  7. char str_val1[]="24\n";
  8. char str_val2[]="32\n";
  9. char str_val3[]="48\n";
  10. sscanf(str_val1,"%d",&var1);
  11. sscanf(str_val2,"%d",&var2);
  12. sscanf(str_val3,"%d",&var3);
  13. printf("var1=%d,var2=%d,var3=%d\n",var1,var2,var3);
  14. }
  15. poet:/tmp$ make 1
  16. cc     1.c   -o 1
  17. 1.c: In function ‘main’:
  18. 1.c:9: warning: incompatible implicit declaration of built-in function ‘sscanf’
  19. 1.c:12: warning: incompatible implicit declaration of built-in function ‘printf’
  20. poet:/tmp$ ./1
  21. var1=24,var2=32,var3=48
  22. Segmentation fault (core dumped)
  23. poet:/tmp$
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-10-15 11:28:49 | 显示全部楼层
Post by zywwzy;257121
佩服。
出这道题的本意就是要应试的人了解指针和缓冲区的问题。
因为作为公司的笔试题,严谨性要求不是特别高。但需要每个做题目的人都能看得懂这段问题代码。


参见我上面一个回帖,作为公司的笔试题,绝对需要严谨要求!否则这种题我见到了就立马走人,不继续面试了。——我2001年就开始出招聘题,其实你要知道招聘题是绝对不应该出错的,否则你将错失许多人才。
回复 支持 反对

使用道具 举报

发表于 2009-10-15 11:39:59 | 显示全部楼层
Post by zywwzy;258018
这里首先有一个前提,编译器没有使用机器字对齐优化选项,基于x86 cpu的操作系统(linux,windows随便)
C语言中局部变量在内存中的存放是连续的。
排列如下:
var3:__【字节1】   
_______【字节2】
_______【字节4】
var2:__【字节1】
var1:__【字节1】   
_______【字节2】
_______【字节3】
_______【字节4】
本题主要涉及C语言里的指针问题。


至少我可以证明gcc不是这样的,因为你这个样子意味着 var1 这个 int 类型被放到非对齐的点,而这会造成CPU无法正常存取该数据。

缺省情况下,编译器应当不会把一个 int 放到非对齐的地方。我不太相信21世纪的任何一个编译器会缺省这么做,注意如果是 arm 等嵌入式CPU,只要对非对齐的整数进行存取可能会直接死机!

如果是 x86,我知道并且实验过这里不会死机,但是我所见到的 gcc 编译器如果不加特殊的紧凑选项,缺省绝对不会把  var1 安排在你想象的位置上。我上面的实验也证明了这一点。
回复 支持 反对

使用道具 举报

发表于 2009-10-21 10:53:42 | 显示全部楼层
相当牛啊,还得好好学习~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表