【发布时间】:2011-03-09 19:38:01
【问题描述】:
有没有办法 malloc 一个大数组,但用 2D 语法引用它?我想要类似的东西:
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);
我收到警告,passing arg 1 of toldyou from incompatible pointer type,但代码有效,并且我已验证可以访问相同的位置。有什么方法可以在不使用其他功能的情况下做到这一点?
【问题讨论】:
-
是的,这已经在 SO 上多次介绍过了,例如C Programming: malloc() for a 2D array (using pointer-to-pointer)
-
er 抱歉,我应该声明我不想嵌套指针。我只想要一个连续的内存块。
-
发布我的答案后,我脑海中闪过“告诉你”的想法。我只是无法想象这一点语法糖是如何值得你跳过所有的箍来获得它;)
-
@Cogwheel:呵呵,我猜不是,但我第一次发布这个问题时并不知道!
标签: c pointers arrays multidimensional-array malloc