gpt4 book ai didi

c++ - 如何将malloc返回的指针视为多维数组?

转载 作者:行者123 更新时间:2023-12-01 14:39:50 25 4
gpt4 key购买 nike

有没有办法告诉编译器我分配了一个大小为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) );

要么
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;
}

关于c++ - 如何将malloc返回的指针视为多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com