struct 结构体
struct 结构体
在编程时,通常方便使用一个名称来引用一组相关的值。结构体提供了一种在同一个名称下存储许多不同类型的值的方法。这使得程序更加模块化,更容易修改,因为其设计更加紧凑。结构体通常在需要将大量数据组合在一起时非常有用——例如,它们可以用来存储数据库记录或存储地址簿中联系人的信息。在联系人示例中,可以使用一个结构体来存储单个联系人的所有信息——姓名、地址、电话号码等。
定义结构体的格式是
struct Tag {
Members
};Tag 是整个结构类型的名称,而 Members 是结构内的变量。要实际创建一个结构,语法是
struct Tag name;要访问结构中的变量,语法是
structure_name.variable;例如:
struct example {
int x;
};
/* 把它当作普通的变量类型对待,只是增加了struct*/
struct example an_example;
an_example.x = 33; /*访问其成员 */这里是一个示例程序:
struct database {
int id_number;
int age;
float salary;
};
int main()
{
/* 现在有一个employee变量,其中包含可修改的变量。*/
struct database employee;
employee.age = 27;
employee.id_number = 1;
employee.salary = 5000.21;
}结构体 database 声明它包含三个变量:age、id_number 和 salary。你可以像使用 int 类型一样使用 database。你可以像上面我展示的那样创建一个 database 类型的员工。然后,要修改它,你需要用'employee.'作为前缀调用所有内容。你也可以通过将返回类型定义为结构类型来从函数中返回结构。例如:
struct database fn();我也会简单介绍一下联合体(unions)。联合体和结构体类似,但所有变量共享同一块内存。声明联合体时,编译器会为联合体中最大的数据类型分配足够的内存。这就像一个巨大的储物箱,你可以存放一个大件物品,或者一个小件物品,但不可能同时存放两者。
'.'运算符也用于访问联合体内部的变量。
最后,如果你希望有一个指向结构体的指针,并实际访问该指针所指向的结构体中的信息,你可以在使用'.'运算符的地方替换为'->'运算符。关于指针的所有规则仍然适用。
快速示例:
#include <stdio.h>
struct xampl {
int x;
};
int main()
{
struct xampl structure;
struct xampl *ptr;
structure.x = 12;
ptr = &structure; /* 是的,你能使用 & 来处理结构和使用指针指向它们 */
printf( "%d\n", ptr->x ); /* -> 的作用有点像指针上的 * ,获取内存地址上的内容,而不是获取内存地址 */
getchar();
}