【C语言从零到入门】第十四节 结构体与联合体

一、结构体

  • 如果我们要在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"};

观察上面的代码,"{}"中的各种变量依次与结构体中的成员变量对应。

扫描二维码关注公众号,回复: 11464570 查看本文章
  • 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 了





好了,文章到这里就结束了,我们下一节再见

点击查看更多【C语言从零到入门】系列

每周五晚20:00更新

猜你喜欢

转载自blog.csdn.net/qq_34802028/article/details/107567650