二維陣列位址

2021-08-11 03:20:22 字數 1563 閱讀 3967

二維陣列定義:

int arr[2][3];

typedef p arr[3];

p *q;

for (size_t i = 0; i < 2; i++) }printf("-------------------------\n");

//value:1, address:010ff770

//value:2, address:010ff774

//value:3, address:010ff778

//value:4, address:010ff77c

//value:5, address:010ff780

//value:6, address:010ff784

二維陣列做引數:

void address(int (*temparr)[3])

printf("\n");

} //temparr:0073fd8c

//&temparr:0073fd8c

//value : 1 value : 2 value : 3

//temparr : 0073fd98

//&temparr : 0073fd98

//value : 4 value : 5 value : 6

}int main()

, };

address(arr);

system("pause");

return 0;

}

int (*temparr)[3]此處等同於int temparr[3]

int *temparr[3]為乙個一維陣列,陣列中每個元素都是指標。

為什麼引數可以寫成int temparr[3],而不可以寫成int temparr[2];

語法上:temparr理解成乙個指標,必須告訴指標指向的型別int [3]。

個人理解:這麼寫帶來乙個額外的好處,可以通過傳參擷取陣列任意位置,任意長度的連續元素。如int temp[0+1][3];

temparr每次+1 步長為指向元素型別的大小,此處為int*3.

關於上段**中temparr和&temparr,位址相同的理解(如果有誤,歡迎指出):此處沒有額外申請空間,temparr可以理解成指標,但是沒有單獨為指標申請空間,本身儲存的就是指向元素的位址,即第一組元素首元素位址,和第二組元素首元素位址(有誤,待糾正)

#include typedef char p[3];  

int main()

輸出結果如下:

q 本質上還是個指標,是個變數,它自身位於棧區,但是它的內容是某個二維陣列的位址,換言之,它的內容與 ch 等價, 但是 q 不是 ch, 這就是編譯器對待指標形式的陣列與 直接形式的陣列的不同之處, q 作為乙個變數,自身也要存在記憶體的某個位置,而符號「q」就是這個位置的代號,而 ch 直接就是某塊記憶體的首位址的代號。

二維陣列和陣列元素位址

二維陣列和陣列元素的位址 先給出一下定義 int p,a 3 4 1.二維陣列a由若干個以為陣列組成 像上面定義的陣列a,我們可以理解為由a 0 a 1 a 2 三個元素組成,而他們有分別是乙個一維陣列 通過我們前面學過的知識可以知道,陣列名是乙個位址,其值是第乙個元素的位址,而此位址的基型別就是陣...

cout 陣列 二維陣列的位址

c primer3.6多維陣列ia的例子,發現對於ia,和ia 0 兩者數值相同,產生了疑問,經過查閱相關資料,特此記錄。一 關於二維 高維陣列的位址 二維陣列ia int對二者 ia,ia 0 的數值是否相同進行驗證 int main cout ia endl cout ia 0 endl ret...

二維陣列位址的關係

int a 3 4 指標所指向的資料型別加1 那麼位址就會加上資料型別對應的位元組數 例如 a 0x12ff18 a 1 0x12ff48 a指向的是有 12個元素的二維陣列,占有 30h位元組的位址空間 a 0 0x12ff18 a 0 1 0x12ff28 a 0 指向的是有 4個元素的一維陣列...