所以我在这里有这个代码我试着创建一个不同大小的二维数组,
首先我声明3个指针,然后我为它们分配不同的数组并希望它工作并且它运行良好,但是存在问题,在第二个代码中编译器给出错误(类型int*
的值不能分配给实体类型int
)所以这意味着它们不再是我想的指针,但为什么会这样,我在这里错过了什么?除了其中一个代码之外,这两个代码的最大区别是在堆栈中声明,而其他代码在堆上
int main()
{
int* arr[3];
arr[0] = new int[5];
arr[1] = new int[2];
arr[2] = new int[6];
delete[] arr[0];
delete[] arr[1];
delete[] arr[2];
}
//第二代码
int main()
{
int* arr = new int[3];
arr[0] = new int[5];
arr[1] = new int[2];
arr[2] = new int[6];
}
抱歉我的baddd英语
答案 0 :(得分:1)
在第一个程序中声明了一个指针数组
int* arr[3];
在第二个程序中,分配了一个整数数组
int* arr = new int[3];
所以例如表达式
arr[0]
的类型为int
。
如果你想分配一个指针数组,你应该写
int ** arr = new int *[3];
^^ ^
在这种情况下表达式
arr[0]
的类型为int *
,您可以写
arr[0] = new int[5];