当我想在C结构中存储动态数据数组时,有两种编写方法:
typedef struct {
int row;
int col;
char* data;
} item1;
或者
typedef struct {
int row;
int col;
char data[];
} item2;
这两种方法都可以工作。但是在我的64位Mac OSX上,使用gcc Apple LLVM版本5.1(clang-503.0.38),它们之间存在一些差异:
sizeof(item1) is 16
sizeof(item2) is 8
为什么会有差异?除此之外,这两个实现还有什么区别吗?
完整的测试代码如下:
#include <stdio.h>
typedef struct {
int row;
int col;
char* data;
} item1;
typedef struct {
int row;
int col;
char data[];
} item2;
int main() {
printf("%d %d\n", sizeof(item1), sizeof(item2));
return 0;
}
输出结果为:
16 8
item1
或item2
。typedef
也不完整,两者似乎有关联。 - Utkan Gezersizeof(item1)
这样的调用是无法工作的。 - Utkan Gezersizeof
在这里不起作用。你发布了一些其他的代码。 - haccks