一、结构体
-
如果我们要在C语言中表达一个复杂的数据类型,例如“人”,仅仅用一种基本的数据类型表示是不够的,一个“人”包含着很多属性,如 姓名、年龄、国家 等,而这些属性可以用基本数据类型表示(如 姓名和国家 可以用字符串类型表示, 年龄 可以用整数型表示)。
-
为了表示“人”这种数据类型,我们可以利用一个
结构体
l类型,用成员变量
表示他的属性。(如 姓名、年龄等)。
1、结构体的声明
struct 结构体名{
成员变量列表…
};
注意:不要忘记{}后面的“ ; ”
例如,我们声明一个结构体“Person”:
struct Person{
char *name;
int age;
char *country;
};
2、结构体变量的声明
在我们声明一个结构体后,我们可以利用下面的语法声明一个结构体变量:
struct 结构体名 变量名;
例如:
struct Person sam;
struct Person jack;
// 这里我们声明了两个结构体变量 sam 和 jack
3、结构体变量的赋值
a、声明并赋值
struct Person sam = {"Sam", 10, "American"};
观察上面的代码,"{}"中的各种变量依次与结构体中的成员变量对应。
- Sam 对应着 char* name;
- 10 对应着 int age;
- American 对应着 char* country;
b、先声明再赋值
声明一个结构体后,可以利用
结构体变量名 . 成员变量名
为结构体变量赋值。
例如:
struct Person tom;
tom.name = "Tom";
tom.age = 11;
tom.country = "England";
4、结构体变量的使用
结构体变量名 . 成员变量名
例如:
printf("Tom的年龄是%d", tom.age);
二、联合体
1、联合体的声明
联合体的声明与结构体类似:
union 联合体名{
成员变量列表…
};
注意:不要忘记{}后面的“ ; ”
例如:
union MyUnion{
int a;
int b;
double c;
};
2、联合体变量的声明
与结构体类似:
union 联合体名 变量名;
3、联合体变量的赋值与使用
-
这里与结构体有很大的不同,联合体变量只能在声明后再为其成员变量赋值。
-
当我们为联合体的成员变量赋值时,原来已经赋值的成员变量就会被覆盖掉
例如:
union MyUnion m;
m.a = 1;
printf("%d\n", m.a); // 输出1
m.b = 666;
printf("%d\n", m.a); // 输出666(成员变量a已经被覆盖掉)
printf("%d\n", m.b); // 输出666
4、联合体的用途
联合体中的成员变量共用一个存储空间,所以为成员变量赋值时,原来的成员变量就会被覆盖掉,我们可以利用联合体类型来适当减少储存空间的占用。
三、typedef关键字
typedef
作用是为一种数据类型起一个新的名字。
例如:
typedef int number; // 这里我们就为 int 起了一个新的名字 number
number a = 1; // 相当于 int a = 1;
所有我们可以利用 typedef 来为结构体起一个别名,减少代码量;
typedef struct { // 这里可以省略结构体名
char *name;
int age;
} Person; // 注意,这里的 Person 是新的别名,不是结构体名
Person a = {"Tom", 10}; // 这样,在声明时就不用写前面的 struct 了
好了,文章到这里就结束了,我们下一节再见
每周五晚20:00更新