指针和数组的区别——SUN面试题
2008-06-12 21:14
393 查看
如果能弄明白这个面试题,基本可以认为明白了指针和数组名的区别
另外转帖一个解释,还算凑合吧,我自己懒得写了,想知道详细的自己看《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
另外转帖一个解释,还算凑合吧,我自己懒得写了,想知道详细的自己看《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
相关文章推荐
- 面试题之数组指针和指针数组的区别
- 从一道面试题看指针与数组的区别
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- 剑指offer面试题2.3.1——数组和指针的区别
- 从一道面试题看指针与数组的区别
- 从一道面试题看指针与数组的区别
- 从一道面试题看指针与数组的区别
- 从一道面试题看指针与数组的区别
- 2017032001面试题之数组指针和指针数组的区别
- 越简单越好:数组名和指针的区别
- [转帖] C/C++数组名与指针区别深层探索
- [收藏]C/C++数组名与指针区别深层探索
- 数组指针与指针数组的区别
- sizeof在数组和指针中的区别
- C/C++数组名与指针区别深层探索
- 剑指offer_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)
- 指针与数组名的区别
- 数组指针和指针数组的区别
- 字符串初始化指针和初始化数组区别
- 数组和指针区别