1. 程式人生 > 實用技巧 >08_二維陣列與指標、陣列指標、指標陣列

08_二維陣列與指標、陣列指標、指標陣列

二維陣列與指標

1 二維陣列可以看作是多個一維陣列

2 陣列名就是陣列的首地址

    int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int* parr00 = &arr[0][0];
int* parr0 = arr[0];

cout<<arr[1][2] << endl;
cout << *(parr00 + 6) << endl;
cout << *(parr0+6) << endl;

陣列指標

本質上還是一個指標,指向陣列的指標

    int a[4] = { 1, 2, 3, 4 };
int(*p)[4] = &a;
// 定義了一個指標p,p是一個數組指標,指向元素型別為int,長度為4的一維陣列

int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int(*parr)[3][4] = &arr;
//
    int a[4] = { 1, 2, 3, 4 };
int(*p)[4] = &a;
cout << *p[1] << endl; // ??
cout<< (*p)[1] << endl; // 2
// (*p) : a
    int arr[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int(*parr)[3][4] = &arr;
cout << " " << (*parr)[1][2] << endl;
cout << " " << *(*((*parr) + 1) + 2) << endl;

指標陣列

本質上還是一個數組,儲存指標的陣列

綜合練習

#include <iostream>
using namespace std;
typedef int I;
typedef int(*B)[4];
int main()
{
I a[4] = { 1, 2, 3, 4 };
int b[4] = { 5,6,7,8 };
int c[4] = { 9,10,11,12 };
int(*pa)[4] = &a;
int(*pb)[4] = &b;
int(*pc)[4] = &c;
// 定義一個數組,元素型別為陣列指標
B parr[3] = { pa, pb, pc };
cout << parr[1][0][3] << endl; // 8
B(*pp)[3] = &parr;
cout << (*pp)[1][0][3] << endl; // 8
cout << pp[0][1][0][3] << endl; // 8

return 0;
}