二維陣列定義:
二維陣列做引數: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個元素的一維陣列...