如何在 c++ 中动态声明指向整数的指针数组?
How do I declare an array of pointers-to-integer dynamically in c++?
为什么会这样?
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_ptr
、vector
等C++功能,你不是在做C编程。
相关文章:
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 整数指针数组的元素是否可以指向整数数组?
- 整数指针与字符指针的情况下悬空指针
- 整数指针数组的大小
- 使用整数指针将左值转换为右值
- 打印整数指针元素时的结果不同
- 将空间分配给整数指针时出错
- 异常包括字符指针和整数指针
- 我可以在 c++ 中使用整数指针调用类的成员函数吗?
- 为什么我们不能使用整数指针声明一个数字数组
- 当我们在 c++ 中将常量整数引用分配给整数指针时,行为是什么
- 为什么允许常量整数指针指向非常量整数
- 在C++中为整数指针编制索引
- 创建字符指针和整数指针数组
- 指向整数指针的 C++ 指针
- 字符结果和整数指针之间的差异
- 删除整数指针时析构函数末尾的分段错误
- 是否可以将整数指针转换为位于该内存位置的实际整数
- 将树的每个节点替换为节点左侧所有值的和,而不使用额外的整数指针参数
- 我允许传递一个整数指针到一个函数,在c++中接受一个整数数组作为参数