c - C 中的 malloc,但使用多维数组语法

标签 c pointers arrays multidimensional-array malloc

有没有什么方法可以 malloc 一个大数组,但是用二维语法引用它?我想要这样的东西:

int *memory = (int *)malloc(sizeof(int)*400*200);
int MAGICVAR = ...;
MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element


更新:值得一提的是:我只想拥有一个连续的内存块。我只是不想写这样的宏:

#define INDX(a,b) (a*200+b);

然后像这样引用我的 blob:

memory[INDX(a,b)];

我更愿意:

memory[a][b];


更新:我知道编译器无法按原样知道。我愿意提供额外的信息,例如:

int *MAGICVAR[][200] = memory;

不存在这样的语法吗?请注意,我不只使用固定宽度数组的原因是它太大而无法放在堆栈上。


更新:好的伙计们,我可以做到这一点:

void toldyou(char MAGICVAR[][286][5]) {
  //use MAGICVAR
}

//from another function:
  char *memory = (char *)malloc(sizeof(char)*1820*286*5);
  fool(memory);

我收到一条警告,从不兼容的指针类型传递 arg 1 of toldyou,但代码有效,而且我已经验证访问了相同的位置。有什么方法可以不使用其他功能来做到这一点吗?

最佳答案

是的,你可以这样做,不,你不需要像大多数其他答案告诉你的那样的另一个指针数组。你想要的调用只是:

int (*MAGICVAR)[200] = malloc(400 * sizeof *MAGICVAR);
MAGICVAR[20][10] = 3; // sets the (200*20 + 10)th element

如果你想声明一个函数返回这样一个指针,你可以这样做:

int (*func(void))[200]
{
    int (*MAGICVAR)[200] = malloc(400 * sizeof *MAGICVAR);
    MAGICVAR[20][10] = 3;

    return MAGICVAR;
}

或者使用 typedef,这样更清晰一些:

typedef int (*arrayptr)[200];

arrayptr function(void)
{
    /* ... */

关于c - C 中的 malloc,但使用多维数组语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3144132/

上一篇:c - 简单的 c malloc

下一篇:复杂声明

相关文章:

c - 在数组上使用字符串的 Switch 语句

javascript - 查询 JavaScript 父子对象

c - 数据类型 - socklen_t、sa_family_t

c - 返回指向局部变量的指针是UB吗?

pointers - Fortran 指针虚拟参数

python - 帮助--Python中的函数指针

c - 如何对 Xlib 中的鼠标滚轮使用react?

objective-c - 分配已分配的内存

c - 传递指针结构

javascript - Javascript 中的数组改组