c語言那些細節之a 1和 a 1的區別

2021-09-01 20:50:13 字數 1266 閱讀 6825

首先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中包含保護的資...