我在C書中讀到,對於數組num[7]
,術語num
等於&num[0]
。這個概念對我來說工作得很好,但是當我寫下如下所示的程序時,我再次感到困惑。給定`int num [7]`,`num`,`num#[0]`,`##'如何不同?
#include<stdio.h>
#include<conio.h>
int main()
{
int num[]={21,22,23,24,25,26,27};
int *x,*y,*z;
x=#
y=num;
z=&num[0];
printf("%d %d %d\n",sizeof(x),sizeof(y),sizeof(z));
printf("%d %d %d\n",sizeof(&num),sizeof(num),sizeof(&num[0]));
printf("%d %d %d",*(&num),*(num),*(&num[0]));
getch();
return 0;
}
輸出爲:
4 4 4
4 28 4
2293536 21 21
如果num
是相同的&num[0]
那麼爲什麼會出現在它們的大小有區別嗎?這是什麼第三種術語&num
?我知道它顯示了垃圾值,但這種類型的術語有什麼意義? z=&num[0]
我已經明白了。編譯器顯示對作業x=&num
的警告,但對於y=num;
,編譯器沒有任何問題。如果num
的大小爲28
那麼爲什麼它會被分配到一個沒有類型轉換的整數指針y
?
然後我試圖2-d陣列是這樣的:
#include<stdio.h>
#include<conio.h>
int main()
{
int s[4][2]={{1234,56},{1235,57},{1236,58},{1237,59}};
int i
printf ("\n%d %d %d %d %d",sizeof(s[i]),sizeof(&s[i]),sizeof(s),
sizeof(s[0][0]),sizeof(&s));
getch();
return 0;
}
現在的輸出是
8 4 32 4 4
這裏sizeof(s[i])
是8
。因爲s[i]
是一維數組,它有兩個元素,所以很好。但我沒有任何線索&s[i]
和&s
的含義。而且我再次能夠看到s
與s[0][0]
不相同。我用Dev C++ 4.9.9.2版本來運行所有的程序。我想在這三類術語中清楚。
閱讀有一個專門對這個問題一整節的C FAQ:http://c-faq.com/aryptr/index.html – AnT
@good問題爲初學者!好友 – niko