sun 的一个面试题

时间:2021-03-14 17:30:46 综合指导 我要投稿

sun 的一个面试题

  •   作者:czzhou | 来源:网友博客 | 发布时间:2007-05-16 | 点击:0

    sun 的一个面试题

  •   /* file1.c */

  •   char buff[128];

  •   /* file2.c */

  •   extern char *buff; /* Notice: extern char buff[] */

  •   int main()

  •   {

  •   *buff = a;

  •   return 0;

  •   }

  •   结果如下:

  •   $ gcc file1.c -c

  •   $ gcc file2.c -c

  •   $ gcc file1.o file2.o -o ff

  •   $ ./ff

  •   Segmentation Fault

  •   问,为何有这个结果?

  •   我试了一下,在file2中换成extern char buff[]就可以,

  •   但不知道为什么了..

  •   论坛上的一种解释:

  •   ---------------------

  •   数组和指针本来是完全不同的东西

  •   数组里面放的是数组元素的值, 指针放的是一个地址

  •   编译器为了处理起来方便,经常把数组当成指针处理

  •   比如:

  •   int buf[5]={0};

  •   int *p = buf;

  •   这个时候编译器知道buf是一个数组

  •   所以会把数组的地址而不是它的内容传给p指针

  •   但是如果数组是在另一个编译单元(编译器对每个编译单元的处理是独立的)

  •   指针p它不知道自己指向的是一个数组

  •   链接的时候也没有buf是一个数组的`信息

  •   所以最后链接的时候, p链接的是buf的内容而不是它的地址

  •   我在linux下的实验结果

  •   ---------------------------------

  •   在file1.c里边

  •   char buf[ 128 ] = {0x10, 0x20, 0x30, 0x40};

  •   在file2.c里边

  •   extern int buf// 注意这里强制把file1.c里边的char buf转换成整形

  •   int main()

  •   {

  •   printf("buf = %x\n", buf );

  •   }

  •   则输出的结果就是

  •   buf = 40302010

【sun 的一个面试题】相关文章:

苹果公司的面试题03-23

图像处理的笔试面试题08-19

华为硬件面试题08-22

经典面试题回答思路08-31

银行招聘英语面试题04-03

求职英语面试题集锦08-22

求职故事:苹果公司的面试题03-25

2017银行常见的面试题及回答04-01

外企应聘最常问的英文面试题03-20

2017外贸业务面试题笔试07-26