编辑:显然,某些内容不允许/在各种C标准中已更改。 为了我的假设的好处,让我们假装我们正在使用没有标准或警告选项的gcc test.c
。
特别是我正在关注底层细节。 我已经添加了我目前的理解。 我是对的吗?
char **c1; //Size for a pointer is allocated on the stack. sizeof(c1) == sizeof(void*)
char *c2[0]; //Nothing is allocated on the stack. sizeof(c2) == 0
除了 sizeof 之外,这两种情况之间是否还有我不知道的其他区别?
struct a {
int i;
char c[0]; //sizeof(a) is sizeof(int)? a.c == (&i)+1?
};
据我了解,这通常用于结构体末尾的可变长度数组。但是,那么对于
struct b {
char *c[0] //sizeof(b) is 0? where does c point?
};
int j;
struct b myb; //myb.c == (&j)+1 == $esp?
此外,如果一个零长度数组的指针没有被分配任何空间,它的地址如何被知晓? 我想它应该和常规数组一样,但我现在还无法理解。