1. 程式人生 > 實用技巧 >二維陣列與陣列指標之間的關聯

二維陣列與陣列指標之間的關聯

二維陣列與陣列指標之間的關聯

思考起點

如何通過指標來讀取陣列內區域性資料

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

舒服了,截取出來還是陣列的用法。

總結

對於陣列來說,他的本質就是指標,但是對於二維以上的陣列,我們不能用單例指標來替換,儘管可以實現,我們可以通過陣列指標來實現,保持了原有陣列的特性。