關於陣列首元素位址與陣列首位址的區分

2021-07-15 19:29:48 字數 573 閱讀 6176

如果定義乙個陣列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上執行結果為: 2

5 究其原因,首先要明確一點,指標加一則要根據指標的型別加上一定的數值。然後再來具體分析,陣列名a為陣列首元素a[0]的位址,它的型別為int*,指向乙個int型元素的儲存區域,因此(a+1)則指向了下乙個元素即a[1]

。而&a表示陣列的首位址,它的型別為

int(*)[5]

,指向五個int型元素的儲存區域,

因此(&a+1)則越過陣列指向下一塊儲存區域,但此處(int*)強制轉換,pp為int*型別,因此(pp-1)左移乙個sizeof(int)的大小,指向了a[4]。此程式的關鍵之處在於對&a進行了型別強制轉化,改變了&a的型別。

陣列首位址

指標可以,開始我們說了指標可以認為是游離的,所以他本身的值可以變化,而自加就是讓指標的首位址變化,但是陣列是固定的,要變化乙個陣列的首位址就要用到雙指標。unsigned char p1 f 30 unsigned char p1 b 300 void change page unsigned ch...

陣列的首位址

char arrgs hello printf arrgs x n arrgs x n arrgs,arrgs arrgs bfad0046 arrgs bfad0046 printf arrgs x n arrgs x n arrgs 1,arrgs 1 arrgs bf9e0997 arrgs ...

有關陣列首元素位址和陣列本身

陣列在兩種情況下代表陣列本身 即該段連續空間 1.對陣列名進行取位址 2.陣列名出現在sizeof之後 其餘陣列名表示首元素位址 比如 函式傳參 int int p1 array int p2 array 0 int p3 array 0 等價 char p3 null 0 void 0 數值上相等...