C++、C二维数组的内部结构

#include<iostream>
using std::cout;
using std::cin;
using std::endl;

//二维数组的内部结构

int main()
{
	int a[3][3] = {1,2,3,4,5,6,7,8,9 };

	//这里a是数组名,也就是数组的首地址,其实际结构为:
	int(*p)[3] = a;
	//这个p是和a等价的

	cout << (*p)[0] << endl;//对指针p解引用之后就是一个数组,可以使用下标访问
	cout << (*p)[1] << endl;
	cout << (*p)[2] << endl;//output:1 2 3

	//是一个数组指针,指向数组的指针,这个数组有三个(int)元素;
	//表面上看是只指向了a的前面三个元素,但由于数组的内部数据是连续的,
	//所以可以对p进行算术运算,来访问后面三个元素,如:

	cout << (*(p + 1))[0] << endl;//a[1][0],a[1][1],a[1][2]
	cout << (*(p + 1))[1] << endl;
	cout << (*(p + 1))[2] << endl;//output:4 5 6

	//当然,也等价于:
	cout << p[1][0] << endl;
	cout << p[1][1] << endl;
	cout << p[1][2] << endl;//output: 4 5 6

	//或者:
	cout << *p[1] << endl;
	cout << *(p[1] + 1) << endl;//p[1]指向中间三个数的首地址
	cout << *(p[1] + 2) << endl;

	//注意,这两个表达是一致的
	// p[0] = *p; 
	// p[1] = *(p+1);
	//*p[1] = **(p+1);

	cout << *p[1] << " " << **(p + 1);//output: 4 4

	//这样的话,如何在堆区new一个二维数组也就明确了
	int(*x)[3] = new int[3][3];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值