C++中用new为二级指针分配空间的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:28:41
C++中,为一级指针分配10*10的空间可以使用如下语法:
INT *ptr;
ptr = new INT[10][10]; 或 ptr = new INT[10 * 10];

但对于二级指针来说,我要为二级指针分配一段空间(也就是指针数组),为什么只能用下面这种语法:
INT **ptr;
ptr = new INT* [10 * 10];

而不能用下面这种语法(这种语法编译出错):
INT **ptr;
ptr = new INT* [10][10];

请高人指教,多谢了~~~
首先补充一下:在VC环境下编译
另外,我重点想问的是:一级指针可以用单个或多个个相邻的中括号来表示申请元素的个数,而二级指针只能用一个中括号(而不能用多个相邻的中括号)来表示申请的元素个数

谢谢大家的回答,sunyaiqq直接地解决了我的问题,fuchuangbob的说明很详细,其它几位也很热心,谢谢,只是只能选一个答案,多少有点遗憾啊,呵呵

首先一级指针
INT *ptr;
ptr = new INT[10][10]; 这句就是错的,编译不过去,所以也就解决你的疑问了。无论1级还是2级指针都不能中括号相邻分配。
其次
INT **ptr;
ptr = new INT* [10 * 10]; 这句是指分配了100个int指针,并不是一个10*10的2维数组。如果分配一个2维数组必须
int **ptr = new int *[10];
for(int i=0;i<10;i++)
{
ptr[i]=new int[10];
}
希望你看懂了!!

int(*)[2]表示的是数组大小为2的数组的指针,int *是一个int整数的指针,你将这两个赋值当然出错。
你所说的ptr = new INT[10][10]; 这句是不可能编译地去的,因为int[10][10]的类型就int(*)[]。同时要弄清楚一个问题就是,int*[]与int(*)[]是不同的,int* []的意思是分配一段内存,内存里面数据类型是int*,即指针类型;而int(*)[]就是一个指针,一个指向后面综括号里那么大一段内存的指针(其实就是那段内存的第一个元素的地址)
如果你用malloc就会更清晰了,int **ptr=(int **)malloc(a*sizeof(int *));
然后
for(i=0;i<a;i++)
*p=(int *)malloc(b*sizeof(int));
这样的结果就相当一个数组ptr[a][b]了,当然这是动态的。

INT *ptr;
ptr = new INT[10][10];
会编译错误。
(错误: 不能将‘int (*)[10]’转换为‘int*’,在 assignment 中)
ptr声明为指向一个INT型的,但是实际指向的却是int(*)[10]型。

//---------------------------------------------------------------------------
#in