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

C++中,为一级指针分配10*10的空间可以使用如下语法:INT*ptr;ptr=newINT[10][10];或ptr=newINT[10*10];但对于二级指针来说,... 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的说明很详细,其它几位也很热心,谢谢,只是只能选一个答案,多少有点遗憾啊,呵呵
展开
 我来答
成弘文WD
2008-09-05 · TA获得超过257个赞
知道小有建树答主
回答量:561
采纳率:0%
帮助的人:364万
展开全部
首先一级指针
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];
}
希望你看懂了!!
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
疾似云流
2008-09-05 · TA获得超过1159个赞
知道小有建树答主
回答量:1093
采纳率:0%
帮助的人:481万
展开全部
INT *ptr;
ptr = new INT[10][10];
会编译错误。
(错误: 不能将‘int (*)[10]’转换为‘int*’,在 assignment 中)
ptr声明为指向一个INT型的,但是实际指向的却是int(*)[10]型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdw2006
2008-09-05 · TA获得超过1614个赞
知道大有可为答主
回答量:2521
采纳率:0%
帮助的人:1858万
展开全部
INT[10 * 10];我觉得大概和INT[100]没两样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fuchuangbob
2008-09-05 · TA获得超过898个赞
知道小有建树答主
回答量:879
采纳率:0%
帮助的人:732万
展开全部
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]了,当然这是动态的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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;

}
//---------------------------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式