继续二维指针

3 篇文章 0 订阅
1 篇文章 0 订阅

最近一直在跟二维指针打交道,感觉还是没有把它弄透,因此搞了几个测试观察一下二维指针的特性。

 

#include <iostream>
using namespace std;
void main()
{
	int **ed = new int *[3];
	for (int i = 0; i<3; i++)
	{
		ed[i] = new int[3]; 
	}

	for (int i = 0; i<3; i++)
		for (int j = 0; j<3; j++)
			ed[i][j] = 3*i + j;

	cout<<ed<<endl;
	cout<<ed[0]<<endl;
	cout<<*ed<<endl<<endl;

	cout<<ed+1<<endl;
	cout<<*(ed+1)<<endl;
	cout<<**(ed+1)<<endl;
	cout<<ed[1]<<endl;
	cout<<ed[2]<<endl<<endl;
	
	cout<<**ed<<endl<<endl;
}


输出的结果是:

 

00494BC8    ed

00494C10    ed[0]

00494C10    *ed

 

00494BCC   ed+1

00494C58    *(ed+1)

3                     **(ed+1)

00494C58    ed[1]

00494CA0    ed[2]

 

0                     **ed

 

ed存储的是二维数组的首地址,*ed和ed[0]存储的是ed中第一个一个数组的首地址,但是实验显示二维数组的首地址和其第一个一维数组的首地址并不相同。这是为什么呢?

 

继续试验

int a[2][2]={0,1,2,3};//初始化了a的第一行元素
	int **b = (int**)a;
	cout<<b[0]<<endl;
	cout<<b[1]<<endl;
	cout<<b[2]<<endl;
	cout<<b[3]<<endl;


这回换了一种方式创建二维指针,先创建一个二维数组,然后将其强制转化为二维指针,并赋于二维指针b。

输出结果为:

00000000

00000001

00000002

00000003

这种复制方法,b[0]并不再是a中第一个一维数组的首地址,而是直接是a中第一个一维数组的第一个元素,b[1]为第一个数组的第二个元素,但是显示出来的结果前面有7个0.

这又是为什么呢?

先写到这,回头有空再仔细分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值