如果我有:
typedef char pos[2]; /*btw I now know no one should do this*/
void someFunction(void) {
pos *s = malloc(sizeof(pos) * 2);
}
在这种情况下,如何运作?它是什么?数组就像指针,只不过当您对它们使用 sizeof 时,您将获得“正确”的大小。那么在这种情况下,以下意味着 s 将指向 sizeof(char)*4 大小的内存?但是 s 的类型是指向指针的指针,这意味着您不能将 s 用作一维数组(或指向 chars 的指针),因为您“仍然需要经过一层/间接/指针” 。还是我错了?
如何使用 s?作为二维数组还是一维数组?
(如果您感兴趣:我需要这个 bc,我想从函数返回两个 pos。有更好的方法吗?(尽管修复了这个问题并使用结构体来存储位置数据而不是 2 大小的数组))
最佳答案
这个typedef
构造相当于:
#include <stdio.h>
void someFunction(void) {
char (*pos)[2];
pos = malloc(sizeof(*pos) * 2);
pos[0][0] = 1;
}
int main(void) {
someFunction();
return 0;
}
这意味着pos
是指向char
的二元素数组的指针。您可以像使用固定列大小为 2 的二维数组一样使用。行数由 malloc()
调用控制,在您的情况下,它也恰好是两行。
关于c - 数组的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365174/