动态分配二维数组

#include<stdio.h>
#include<stdlib.h>

int main()
{
int **pArray2; /*二维数组指针*/
int iIndex1,iIndex2; /*循环控制变量*/
pArray2=(int**)malloc(sizeof(int*[3])); /*指向指针的指针?这句话怎么理解?sizeof(int*[3])*/
for(iIndex1=0;iIndex1<3;iIndex1++)
{
*(pArray2+iIndex1)=(int*)malloc(sizeof(int[3]));
for(iIndex2=0;iIndex2<3;iIndex2++)
{
*(*(pArray2+iIndex1)+iIndex2)=iIndex1+iIndex2;
}
}
/*输出二维数组中的数据内容*/
for(iIndex1=0;iIndex1<3;iIndex1++)
{
for(iIndex2=0;iIndex2<3;iIndex2++)
{
printf("%d\t",*(*(pArray2+iIndex1)+iIndex2));
}
printf("\n");
}
return 0;
}
问题在题中问号处

    括号中的sizeof(int* [3])的意思是计算三个int类型指针的大小,值得注意的是它不是函数,而是一个运算符;

    再看前面的语句 pArray2 = (int**) malloc (sizeof(int*[3]));表示分配3个指针类型大小的空间,显然这些空间是用来存放3个指针的,这些指针按照后面代码的意思是存放一维数组的首地址的;

    再说(int**):我们分配的空间都是需要指针指向的,不然就出现内存泄露了,这个数组存放的内容是int*类型的,再取其地址就是int**了

    给你画个图示:


温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-24
(1)
pArray2=(int**)malloc(sizeof(int*[3]));
声明了pArray2 是2重指针(指向指针的指针) int **pArray2;
所以 赋值 时 要把分配的空间 转化为 int **, 这个 (int**) 是强制转化。
int*[3] 是一个指针数组(类型),它共有3个元素,每个元素都是1个指针,共有3 个。
sizeof 不是函数,而是 c 语言中 特殊的 运算符,计算 某种 变量类型 占内存 空间 大小,单位是 字节。sizeof ( int*[3] ) 就是算出 int*[3] 指针数组(类型) ,占内存 空间 大小。
malloc 是函数,分配 上面算出的 字节数 那么 大 的空间。
---------
(2)
下面的 *(pArray2+iIndex1)= 。。。循环,是给 指针数组 的 3个元素 动态分配 存储单元。
----------
简单理解: (1) 是 分配 2维数组 有多少行; (2)是 分配 2维数组 有多少列;追问

谢谢,我已经看明白了

第2个回答  2014-07-24
1.首先a是一个指针的指针,a=new int*[m],
表示给a分配了一个数组,数组的大小是m,每个元素是一个int的指针,但是现在这个指针是空值,没有东西的
所以接下来就给每个指针new了空间a[i]=new int[n]
2.可以,你在类的数据成员里面声明一个int **a;
然后把动态分配的代码放到类的方法里面去就行了,别忘了delete
相似回答