您的位置:首页 > 编程语言 > C语言/C++

C/C++中二维数组和指针关系分析

2017-05-17 16:49 232 查看
#include<iostream>
using namespace std;
int main() {
// 初始化一个二维数组
int iArr[2][3] = {0,1,2,3,4,5};
// 把一个二维数组一维化
int *p = iArr[0]; // iArr[0]第一个数组的首地址
//由于二维数组在内存中的存储是先行后列的方式,所以第二行也紧跟第一行之后,这样
// 就可以用p来访问数组的元素了

//它们输出的结果都是3
cout << p[4] << endl;  //这种访问方式是下标的方式
cout<< *(p + 4) << endl; // 这种方式是指针方式

// 下面用二维数组去探索
//int **q = iArr;  // 这样子不出意外的话会报错的,是无法从int[2][3]转化为 int **

//其实二维数组名是一个数组指针,那么什么是数组指针,数组指针就是指向一个数组首地址的指针,它
// 实际也是一种指针类型,类似与函数指针,它的声明如下
//int(*pArr)[3];// 它说明pArr是一个数组指针,它指向的是一个数组元素为int类型并且数组的元素的个数为
// 3的一个数组指针,中间的括号是必不可少的。少了它就变为:指针数组。指针数组是数组
// 类型,它的声明如下:
//int *pArr[3];

// 既然二维数组的数组名是指向第一行数组的首地址,我们也叫它为行指针。那么我们就可以用这种数组名
// 或者指针来 访问二维数组的元素。
int(*pArr)[3]=iArr;
// 下面,访问第二行第二列的元素,代码如下
cout <<"第一行第二列的元素:"<< *(*(pArr+1) +1) << endl;
// 也可以用这这种方法来访问
cout << *(*(iArr+1) + 1) << endl;;

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: