您的位置:首页 > 其它

让一维指针指向二维数组空间的方法!

2009-12-04 13:41 399 查看
背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间?

正确的方法:

1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100];

for(int i=0;i<10;i++)

{

for(int j=0;j<10;j++)

{

*p=a[i][j];

p++;

}

}

p=p-100;

这样就另外开辟了100的内存空间,并让p指向了,这个内存区间的起始地址

2.直接p=&a[0][0];

3.p=a[0];这样也行,确实让人费解

4.p=(int*)a;

错误的方法:

p=a;//二维数组的数组名,表示一个指向列值个元素的一维数组的指针变量

拓展方法:

从上面可以看出,这些指针本质上都是指向一种类型(整型的指针),他们之间的转换无非是强制转换,这样都不会有问题,结论就是同类型指针同维数指针之间强制转换都不会有问题,

下面的方法:

int(*pa)[10]=null;

int **pab=(int**)pa;//这里编译没问题,运行有问题

int *p=(int*)pa;//这样编译没问题,运行也没问题,相当于二维转一维

p=(int *)pab;//编译没问题,运行没问题,二维转一维

从上面可以看出,二维指针之间强制转换会出现不可知的问题,而二维强制转一维都不会有问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐