我阅读了其中包含以下结构的教程:
struct
{
char Name[25];
int Age;
float SkillRating;
} Employee;
定义一个名为Employee的新聚合,其中包含名为Name(字符类型),Age(整数类型)和SkillRating(float类型)的字段。
相反,C语句:
struct EmployeeType
{
char Name[25];
int Age;
float SkillRating;
};
不定义新的聚合变量,而是定义新的聚合类型, EmployeeType。 然后,可以使用这种新的数据类型在 与原始数据类型相同的方式。也就是说,就像C允许 使用语句将变量x声明为整数
我在这里很困惑。如果将“ Emplyee”放在不同的位置,是否存在区别?
我想它们是相同的。
答案 0 :(得分:4)
在第一种情况下,struct
是未命名的,而Employee
是该未命名结构的变量。您可以像这样直接修改它:
int main()
{
Employee.Age = 100;
return 0;
}
在第二种情况下,EmployeeType
只是一种类型,但是您尚未创建它的任何实例。您可以创建任意数量的实例:
int main()
{
struct EmployeeType a; // employee on the stack
a.Age = 100;
struct EmployeeType *b = malloc(sizeof(struct EmployeeType)); // employee on the heap
if (b) { // set the age of b if the allocation succeeded
b->Age = 100;
}
free(b); // malloc-allocated memory must be freed afterwards
return 0;
}
您甚至可以同时执行两项操作:
struct EmployeeType
{
char Name[25];
int
Age;
float SkillRating;
} Employee;
在这里,Employee
是它的一个实例,但是您可以创建其他实例:
int main()
{
Employee.Age = 100;
struct EmployeeType a; // employee on the stack
a.Age = 100;
return 0;
}
答案 1 :(得分:3)
struct A_s { int memb; }; // declares a struct A_s
struct A_s a; // declares a variable a of type struct A_s
现在您可以将struct声明与变量声明结合起来
// declares struct A_s and in the same line declares variable a
struct A_s { int memb; } a;
现在,您可以通过省略结构标签名称来创建匿名结构:
// declares anonymous struct and in the same line declares variable a
struct { int memb; } a;
现在结构声明实际上可以放在任何地方:
int func(int a, struct A_s { int memb; } b);
struct A_s { int memb; } func(int a);
struct B_s {
int memb1;
struct A_s {
int memb2;
} a;
};
我认为您的帖子中对“名称”字段的C代码的描述无效。 “聚合”(读取为:结构)中的字段name
的类型为“ 25个字符的数组”,而不是字符类型。
答案 2 :(得分:1)
struct
关键字可用于声明聚合数据类型,聚合数据对象或两者。
在您的第一个声明(和定义)中,缺少标签名称,因此创建了一个匿名对象“ Employee”。 “雇员”仍然是此结构的唯一对象。您无法在代码的其他任何地方从该结构创建更多对象。
在第二个声明中,您创建了一个可以实例化多次的struct类型(即,可以存在该struct的多个实例),如下所示-
struct EmployeeType employee_1;
struct EmployeeType employee_2;
根据使用情况,这两种语法都很有用。