C C 陣列首元素的位址和陣列位址的區別

2021-09-11 05:47:21 字數 998 閱讀 5096

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...