首先a是乙個陣列名,當看到這個a與&a時,一般我們的理解都是這個陣列的首位址。沒錯,如果加上列印的話,確實兩個值是一樣的。
不過&a是整個陣列的首位址,a則是陣列首元素的位址,雖然值一樣,但是意義卻不相同。
在此之前有必要先看下c程式在記憶體中的分布圖。
下面來看乙個例子吧還是。
示例**:
[html]view plain
copy
#include
int main(int argc, char *argv)
; int s;
int *p = (int *)(&a+1);
printf(" a = %p\n&a = %p\n", a, &a);
for(i = 0; i
printf("a[%d] = %p\n", i, &a[i]);
printf(" p = %p\n&p = %p\n&s = %p\n", p, &p, &s);
return 0;
}
執行結果:
[html]view plain
copy
a = 0022ff40
&a = 0022ff40
a[0] = 0022ff40
a[1] = 0022ff44
a[2] = 0022ff48
a[3] = 0022ff4c
a[4] = 0022ff50
p = 0022ff54
&p = 0022ff38
&s = 0022ff3c
由上面的執行結果,我們可以知道a和&a的區別了。可得下圖:
因為是執行在main函式體內的變數,所以這些都是在棧中執行的,所以p指標是指向了a[4]後的那個位址,而p本身的位址是在棧中分配的。
綜上可知:
[html]view plain
copy
&a+i = a + i*sizeof(a); 所以&a+1就是偏移的是乙個陣列長度。
a+i = a +i*sizeof(a[0]);
a 1和(int )a 1的分析
首先解釋a與 a 他兩的值一樣但是意義不同,a表示的是陣列首元素的首位址 處於元素層,加減是以元素所佔記憶體大小為單位計算 a表示的是陣列的首位址 以陣列整個長度為單位進行計算 這樣再來解釋監視視窗的值的得來,首先 a 為陣列首位址和a 即a 0 的位址一樣 0x0012ff50 a 的型別是 in...
C筆記 關於陣列位址 1的含義( a 1)
以下c語言指令執行結果是?int a 5 int p int a 1 printf d,d a 1 p 1 輸出為3,9.解析 a 1 其實就是指a 1 輸出為3.p 1 輸出為多少?a 1不是首位址 1,系統會認為加了乙個a陣列,偏移了整個陣列a的大小 也就是5個int的大小 所以int p in...
c 練習題 A是A1的虛基類
7 1 a是a1的虛基類 15分 本題目要求讀入3個整數a b和c,然後按照下列要求完成相關設計 1.定義乙個基類a,在其中包含保護的資料成員int i,設計類a的帶參建構函式對i進行初始化,定義成員函式display 顯示i值 2.定義基類a的公有派生類a1,且a是a1的虛基類 a1中包含保護的資...