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;
}

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/ZhenXin0101/p/13524858.html