指针数组与数组指针------C++学习笔记

来源:互联网 发布:java支付宝开发 编辑:程序博客网 时间:2024/05/29 16:41

问题来源:在动态分配内存中,动态创建多维数组时,比如说new int[3][4][5],那么我们的new操作符返回的是指向新分配内存空间首地址的指针,然而这个指针不是int型的指针,而是int数组的指针,这个int数组元素个数为(除去最左边第一维外各维下标表达式的乘积)<----(C++程序设计第四版 清华出版社)。

也就是可以这样:

int (*p)[4][5];p=new int[3][4][5];
但是下面这样是不可以的:

int *p;p=new int[3][4][5];

针对上面返回int数组指针到结尾这就话,我们以new int[3][4][5]为例,返回的int型数组的指针,其数组元素个数为20个,所以写成(*p)[4][5]是显而易见的,那么能否写成(*p)[5][4]的形式呢,是不是只要元素个数对应就可以呢?还是每一维的个数都要对应呢?我们再VS2010下做测试。



从结果我们可以看出不仅数组元素的个数要对应,维数也是要对应的。

指针数组:

int *p[3];//一维指针数组,每个元素都是指向int型的指针int *p[3][4];//二维指针数组,每个元素都是指向int型的指针??

数组的指针:

int a[3];//一维数组int aa[3][4];//二维数组int aaa[3][4][5];//三维数组int *p=a;//一维数组的指针int (*pp)[4]=aa;//二维数组的指针int (*ppp)[4][5]=aaa;//三维数组的指针

  用指针访问素组元素的格式如下:一维:*(p+i);二维:*(*(pp+i)+j);三维:*(*(*(ppp+i)+j)+k),依次类推。


0 0