有没有办法告诉编译器我已经分配了大小为 N * M 的内存,并且我想将此指针视为 N * M 数组?换句话说,有没有办法写这样的东西?:
int arr[N][M] = (int[N][M])malloc(N * M * sizeof(int));
arr[x][y] = 123;
我知道编译器不知道数组的维度,它只知道这是一个指针。所以我的问题是:我可以以某种方式告诉编译器 malloc 返回的这个指针是一个数组指针并且它的维度是 N * M 吗?我可以使用数组到指针、指针到数组或指针到指针,但在所有情况下我都必须查找 2 个地址。我想在堆上拥有连续的内存并将其视为多维数组。就像我会写的那样:
int arr[N][M];
有什么办法可以实现这一点吗?
在 C++ 程序中,您应该使用运算符 new。
至于malloc,那么在C++中,如果要分配二维数组,M应该是常量表达式。
例如你可以写
int ( *arr )[M] = ( int ( * )[M] )malloc( N * M * sizeof(int) );
or
int ( *arr )[M] = ( int ( * )[M] )malloc( sizeof( int[N][M] ) );
如果使用 new 运算符,则分配可能如下所示
int ( *arr )[M] = new int[N][M];
如果 M 不是编译时常量,那么您可以使用标准容器std::vector
如下面的演示程序所示
#include <iostream>
#include <vector>
int main()
{
size_t n = 10, m = 10;
std::vector<std::vector<int>> v( n, { m } );
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)