陣列指標 指標陣列 位址的強制轉換記憶體布局

2021-07-24 23:48:23 字數 896 閱讀 5120

1、指標陣列 

首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是「儲存指標的陣列」的簡稱。 

2、陣列指標 

首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是「指向陣列的指標」的簡稱。

//下面到底哪個是陣列指標,哪個是指標陣列呢: a)

int*p1[10

]; b)int

(*p2

)[10];

「」的優先順序比「」要高。p1 先與「」結合,因此我們可以 int *p1[10]; 寫成 int (p1[10]); 陣列元素是包含10個指向int型別的資料指標。 

其記憶體布局為 

【分析】 

ptr1:將&a+1 的值強制轉換成int*型別,賦值給int* 型別的變數ptr,ptr1 肯定指到陣列a 的下乙個int 型別資料了。&a

+i =

a+ i*sizeof(a)

;  a+i =

a+i*sizeof(a[

0]);

ptr1[-1]:被解析成*(ptr1-1),即ptr1 往後退4 個byte。所以其值為0x4。

ptr2:按照上面的講解,(int)a+1 的值是元素a[0]的第二個位元組的位址。然後把這個位址強制轉換成int*型別的值賦給ptr2,也就是說*ptr2 的值應該為元素a[0]的第二個位元組開始的連續4 個byte 的內容。

其記憶體布局為(暫不考慮大小端問題,按小端處理): 

陣列指標 指標陣列 位址的強制轉換記憶體布局

1 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。2 陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。下面到底哪個是陣列指標,哪個是...

陣列指標 指標陣列 位址的強制轉換記憶體布局

1 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。2 陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。下面到底哪個是陣列指標,哪個是...

printf 指標位址 陣列指標和指標陣列

首先,理解一下陣列指標和指標陣列這兩個名詞 陣列的指標 是乙個指標,什麼樣的指標呢?指向陣列的指標。指標的陣列 是乙個陣列,什麼樣的陣列呢?裝著指標的陣列。然後,需要明確乙個優先順序順序 所以 p n 根據優先順序,先看括號內,則p是乙個指標,這個指標指向乙個一維陣列,陣列長度為n,這是 陣列的指標...