为什么 C 中结构或联合的 sizeof 需要一个变量?
Why sizeof of a structure or union in C need a variable?
无法编译以下代码(GCC)。上面说这个人和u_type是未申报的。如果我在 sizeof() 中使用变量,就可以了。那么为什么在 sizeof() 中需要一个变量。 The GNU C Reference Manual 表示 sizeof 运算符可以与类型和表达式一起使用。
谢谢,
struct person {
int age;
char *name;
};
union u_type {
int t_int;
double t_double;
};
int main(void) {
printf("size of person is %d\n", sizeof(person));
printf("size of u_type is %d\n", sizeof(u_type));
return 0;
}
这是因为 sizeof 运算符需要一些它可以告诉 大小的东西。
如果它留空,它就没有什么可审查和生成答案的,但是因为你在程序中使用它时没有传递任何参数,它会报错,因为如果你理解的话 sizeof empty 有点模糊。
您的程序中没有名为 person
或 u_type
的内容。当然你有 struct person
和 union u_type
但没有类型定义让你只使用 person
和 u_type
尝试sizeof(struct person)
回答评论中的问题:
struct person { ... };
给你一个类型:struct person
- person 是一个标签。您需要使用 struct person
才能使用该类型。在这种情况下 sizeof(struct person)
.
struct { ... } person;
给你一个名为 person
的变量,它是一个结构(但你不能重用该类型)。在这种情况下 sizeof(person)
最常见的用法是 typedef struct { ... } Person
,它为您提供类型 Person - 与第一种情况非常相似,但您可以使用 Person
而不是 struct person
。在这种情况下 sizeof(Person)
无法编译以下代码(GCC)。上面说这个人和u_type是未申报的。如果我在 sizeof() 中使用变量,就可以了。那么为什么在 sizeof() 中需要一个变量。 The GNU C Reference Manual 表示 sizeof 运算符可以与类型和表达式一起使用。
谢谢,
struct person {
int age;
char *name;
};
union u_type {
int t_int;
double t_double;
};
int main(void) {
printf("size of person is %d\n", sizeof(person));
printf("size of u_type is %d\n", sizeof(u_type));
return 0;
}
这是因为 sizeof 运算符需要一些它可以告诉 大小的东西。 如果它留空,它就没有什么可审查和生成答案的,但是因为你在程序中使用它时没有传递任何参数,它会报错,因为如果你理解的话 sizeof empty 有点模糊。
您的程序中没有名为 person
或 u_type
的内容。当然你有 struct person
和 union u_type
但没有类型定义让你只使用 person
和 u_type
尝试sizeof(struct person)
回答评论中的问题:
struct person { ... };
给你一个类型:struct person
- person 是一个标签。您需要使用 struct person
才能使用该类型。在这种情况下 sizeof(struct person)
.
struct { ... } person;
给你一个名为 person
的变量,它是一个结构(但你不能重用该类型)。在这种情况下 sizeof(person)
最常见的用法是 typedef struct { ... } Person
,它为您提供类型 Person - 与第一种情况非常相似,但您可以使用 Person
而不是 struct person
。在这种情况下 sizeof(Person)