如何在 c++ 中动态声明指向整数的指针数组?

How do I declare an array of pointers-to-integer dynamically in c++?

本文关键字:整数 指针 数组 声明 c++ 动态      更新时间:2023-10-16

为什么会这样?

int **ar1 = new int*[5];

虽然这会在 C++ 中引发错误:

int *ar2[] = new int*[5];

我知道在第一种情况下,ar1 表示指针到指针,而在第二种情况下,ar2 表示指针到整数数组。鉴于行"new int*[5]"意味着new运算符返回指向内存空间的指针以存储指向整数的5个指针,那么第二种情况有什么问题???

您正在尝试初始化数组对象。

初始化数组类型的对象时,初始值设定项必须 字符串文本(可选地括在大括号中(或 为数组成员初始化的大括号括起来的列表

在您的情况下,您不提供任何内容。大括号初始化,例如:

int i = 1, j = 2;
int *ar2[] = {&i, &j};

好吧,首先尝试简化问题

这个问题与指向整数的指针无关,您的问题在于数组本身。

因此,尝试将其简化为整数数组

这行得通

int a[] = {1, 2, 3, 4, 5, 6, 7};

虽然这不起作用

int a[] = new int[7];

它失败并出现以下错误

错误:初始值设定项无法确定"A"的大小

在生成程序集的联机编译器上尝试时(在 clang 6.0.0 上尝试(,发现

int a[]

尝试在堆栈上分配,这意味着大小应该在编译时知道,而new运算符的结果直到运行时才知道,因为它在上动态分配数组{通过系统调用进行的大量计算决定了数组在内存中的位置}。

有关堆栈与堆的更多信息:

堆栈和堆

注意:当函数中有[]参数时,它就像*

所以

void doSomething(int b[]) {
}
int main() {
    doSomething(new int[100])
    return 0;
}

有效

问题主要与局部变量有关。

无论如何,如果你试图制作一些生产代码,建议你使用shared_ptrvector等C++功能,你不是在做C编程。