- 相關推薦
sun 的一個面試題
作者:czzhou | 來源:網友博客 | 發布時間:2007-05-16 | 點擊:0
/* 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 的一個面試題】相關文章:
SUN認證11-12
面試題精選02-18
分享面試題目 教育職業面試題11-20
熱門就業行業面試題精選:編輯行業面試題!11-19
Microsoft 面試題11-19
蘋果 面試題11-19
熱門就業行業面試題精選 銷售行業面試題11-20
熱門就業行業面試題目精選:行政行業面試題11-20
銀行招聘面試題11-26
經典面試題 及答案分析11-20