代码:
int r, c;
cin >> r >> c;
int matrix[r][c];我不明白运行时分配背后的想法。目的是在运行时分配内存,但在上面的代码部分,我们也是这样做的。
当代码的这一部分运行时,输入的大小是在运行时给出的,矩阵是根据行和列的大小分配内存的,那么它是如何静态的或编译时分配的呢?
发布于 2022-03-13 19:37:37
本声明
int r, c;
cin >> r >> c;
int matrix[r][c];变量长度数组的声明。
此数组具有自动存储持续时间。并在运行时创建数组,当变量r和c的值已知时。
但是,可变长度数组不是标准的C++特性。
而不是数组,您可以使用标准容器std::vector,如
std::vector<std::vector<int>> matrix( r, std::vector<int>( c ) );在这种情况下,矩阵的所有元素都将被零初始化。
发布于 2022-03-13 19:41:04
静态,但在运行时分配。
静态分配是固定大小的,出现在快速但很小的堆栈上:
int a = 0;动态分配可以是动态大小的,但是在堆上分配小东西是不符合性能的:
int* a = new int(0);只有动态内存可以传递给不同的作用域,但是当您完成时需要对其进行delete。
https://stackoverflow.com/questions/71460192
复制相似问题