我在看一些C++方面的教材时,一些书上这样写到:
用New操作可以创建多维数组,new 类型名 T[下标表达式1][下表表达式2]...。数组的个数是除最左边一位外各位下表表达式的乘积。
如:float (*fp)[25][10];
fp=new float[10][25][10];//用new操作产生了一个指向25*10的二维数组的指针;
而,这么写:float *fp=new float[10][25][10]; 是错误的,原因是什么呢?下面试分析之:
实际上,不难发现,指针总是比它指向的数组对象少一维。
****一维数组如;float *fp=new float[10];指针fp开始指向的是一维数组的首地址,指针fp是一个
指向float型数据的指针。
****二维数组如:float (*fp)[25]=new float[10][25],指针fp开始指向的是二维数组的首地址,指针fp是一个指向有25个元素的的float类型的一维数组,而fp
有10个偏移,每个偏移都指向一个有25个元素的float类型的一维数组,所以实际上相当于一个二维数组。如果在深入一步进行理解,就可以写出如下等价代码:
float **fp=new float* [10] ;for (int i=0;i<10;i++) fp[i]=new float[25] ;
****三维数组如:float (*fp)[25][10]=new float[10][25][10];指针fp是一个指向25*10的二维float型的数组的指针,指针的偏移是10,不过每个偏移指向的是一个二维
数组。******用一段程序进行总结:
1 #include2 using namespace std; 3 /* 4 *--- 用new创建动态的多维数组 5 *--- 深入理解指针的功能和作用 6 */ 7 int main() 8 { 9 float *fp=new float[5];10 float (*fp1)[5]=new float[4][5];11 float (*fp2)[4][5]=new float[2][4][5];12 cout<<"---------The division 1-----------"<
代码运行结果: