1、首先陣列首元素的位址和陣列位址的值是相等的。
2、陣列首元素的位址和陣列位址是兩個不同的概念。
3、舉例如下:
#includevoid main() ;
printf("%d\n", a);
printf("%d\n", a+1); //與前面乙個相差4
printf("%d\n", &a);
printf("%d\n", &a + 1); //與前面乙個相差40
}
輸出結果如下:
a的值是陣列首元素的位址,所以a+1,就是第二個元素的位址,int型別占用4個位元組,所以相差4
而&a是整個陣列的位址,所以&a+1,就是向後移動(10*4)個單位。所以相差40.
自己的思考:其實a的本質是指標,就像(中括號)的本質是*一樣,所以當a+1的時候,指標向後偏移sizeof(int)的大小。而&a這個時候的a是乙個變數。這個變數是int [10].所以&a+1,偏移10*sizeof(int).
int a[10]; //a是乙個指標===》a常量指標===》為什麼a常量指標
a ++;//不能進行a++
c++編譯器要拿著a去析構記憶體,為了避免你把a的指向改變。
這裡還有乙個釋放記憶體的知識點:
char * p="abcdefg";
free(p);//釋放記憶體
p==null;//避免野指標
但是如果進行了p++以後,free(p);不行了,free釋放記憶體必須從首位址開始。
關注我,讓我們一起成長!
有關陣列首元素位址和陣列本身
陣列在兩種情況下代表陣列本身 即該段連續空間 1.對陣列名進行取位址 2.陣列名出現在sizeof之後 其餘陣列名表示首元素位址 比如 函式傳參 int int p1 array int p2 array 0 int p3 array 0 等價 char p3 null 0 void 0 數值上相等...
陣列指標和陣列首位址
下面 會輸出什麼 1 2 3 4 5 6 intmain intargc,char argv int ptr int a 1 printf d ptr 1 答案 4 解析 這邊主要考察的是陣列指標和陣列首位址的問題。a是陣列指標,a是陣列首位址。而指標的 1,增加的是1個指標型別的長度。比如 a是陣...
關於陣列首元素位址與陣列首位址的區分
如果定義乙個陣列a 則陣列名a和 a 0 表示陣列首元素的位址,而 a則表示陣列的首位址,通過下面這個經典的程式則可以理解它們的區別 include int main int p a 1 int pp int a 1 printf d n p printf d n pp 1 return 0 在vs...