二維陣列與陣列指標之間的關聯
阿新 • • 發佈:2020-11-29
二維陣列與陣列指標之間的關聯
思考起點:
如何通過指標來讀取陣列內區域性資料?
1.使用小陣列來擷取大陣列
int main()
{
int a[8]={1,2,3,4,5,6,7,8};
int b[2]={};
b = a;
printf("%d\n",b[0]);
return 0;
}
error: incompatible types in assignment of ‘int [8]’ to ‘int [2]’
編譯失敗,左右型別不一致;改進一下
2.使用指標來擷取
int main() { int a[8]={1,2,3,4,5,6,7,8}; int *b; b = a+2; printf("%d\n",b[0]); return 0; } reslut: 3
初步實現資料擷取,測試二維陣列
3.使用指標擷取二維陣列
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *b;
b = *(a+1);
printf("%d\n",*((b+4*1)+1));
return 0;
}
reslut:
10
也實現了,但是總覺得少了點味道,變味的陣列,*((b+4*1)+1),呼叫起來還得自己去算,這點可以通過設定常量解決,但是這個式子打起來是真的累,在改改。
4.使用陣列指標(集合指標)擷取二維陣列
typedef int (*ptest)[4];
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
ptest b;
b = a+1;
printf("%d\n",b[1][1]);
return 0;
}
reslut:
10
舒服了,截取出來還是陣列的用法。
總結
對於陣列來說,他的本質就是指標,但是對於二維以上的陣列,我們不能用單例指標來替換,儘管可以實現,我們可以通過陣列指標來實現,保持了原有陣列的特性。