请各位强人指点! 想在堆中分配二维动态数组,int** p=new (int*) [6];为什么不可以?p为二维数组名。
答案:4 悬赏:20
解决时间 2021-02-15 06:08
- 提问者网友:白柏唇蜜
- 2021-02-14 15:57
请各位强人指点! 想在堆中分配二维动态数组,int** p=new (int*) [6];为什么不可以?p为二维数组名。
最佳答案
- 二级知识专家网友:一场云烟
- 2021-02-14 16:58
int ** p=new (int*)[6]; 声明一个6个元素的数组,数组每个元素都是一个int *指针,每个元素还可以单独申请空间,因为p的类型是int*型的指针,p++执行的是数组的递增,然后通过(p++)++实现在每个int *元素列表中进行递增;
int ** p = new int *[6];声明的是一个指针,每个指针元素是6个元素的数组。p++实现的是逐个int[6]的地址递加,然后在外侧再通过加地址实现每个6元数组的内部访问。
这里主要是由于符号的结合性造成的。
int ** p = new int *[6];声明的是一个指针,每个指针元素是6个元素的数组。p++实现的是逐个int[6]的地址递加,然后在外侧再通过加地址实现每个6元数组的内部访问。
这里主要是由于符号的结合性造成的。
全部回答
- 1楼网友:糜废丧逼
- 2021-02-14 18:07
单独写int*和(int*)无区别。
若后接数组下标,则不允许。
C++标准中的规定如此,与其他因素无关。
gcc的提示为:array bound forbidden after parenthesized type-id 。
- 2楼网友:情窦初殇
- 2021-02-14 17:39
int** p=new (int*) [6]; //应该改为:int (*p)[6]=new int[4][6]; 表示分配4个一维数组空间,并将第一个一维数组首地址赋给p。
int** p=new int*[6]; //表示分配6个元素的空间,每个元素都是整型指针。并将空间首地址赋给p,等号左右与右边类型一致,语句正确。
- 3楼网友:你把微笑给了谁
- 2021-02-14 17:24
int a[size][size];
int **p = a;
这样是不行的
但是可以这样:
int**p = (int**)malloc(sizeof(int*)*size);
for (int i = 0; i < size; i++) {
p[i] = (int*)malloc(sizeof(int)*size);
}
然后就可以这么用了 p[i][j]。
想要指向二维数组,必须定义一个指向一维数组的指针
int (*p)[size] = a; 这样才能赋值。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯