第1个回答 2008-09-05
INT *ptr;
ptr = new INT[10][10];
会编译错误。
(错误: 不能将‘int (*)[10]’转换为‘int*’,在 assignment 中)
ptr声明为指向一个INT型的,但是实际指向的却是int(*)[10]型。
第2个回答 2008-09-05
INT[10 * 10];我觉得大概和INT[100]没两样
第3个回答 2008-09-05
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]了,当然这是动态的。
第4个回答 2008-09-05
//---------------------------------------------------------------------------
#include <iostream>
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<<p[i][j]<<'\t';
}
std::cout<<std::endl;
delete[] p[i];
}
delete[] p;
return 0;
}
//---------------------------------------------------------------------------