指针和数组的区别——SUN面试题

如果能弄明白这个面试题,基本可以认为明白了指针和数组名的区别 另外转帖一个解释,还算凑合吧,我自己懒得写了,想知道详细的自己看《C专家编程》 ================ /* 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   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值