首先一级指针
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 *ptr;
ptr = new INT[10][10];
会编译错误。
(错误: 不能将‘int (*)[10]’转换为‘int*’,在 assignment 中)
ptr声明为指向一个INT型的,但是实际指向的却是int(*)[10]型。
INT[10 * 10];我觉得大概和INT[100]没两样
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*p=(int *)malloc(b*sizeof(int));
这样的结果就相当一个数组ptr[a][b]了,当然这是动态的。
//--------------------------------------------------------------------------- }
#include
int main(void)
{
int **p;
int i,j;
p=new int*[10];/*注意这里*/
for (i = 0; i < 10; i++) {
p[i]=new int[10];/*注意这里*/
}
for (i = 0; i < 10; i++) {
for (j=0; j<10; ++j) {
p[i][j]=i*j;
std::cout<
std::cout<
}
delete[] p;
return 0;
}
//---------------------------------------------------------------------------