C语言结构体与共用体
C 语言中结构体与共用体
结构体(struct)
结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起形成一个新的数据类型,方便程序的编写和管理。
定义结构体
在 C 语言中,定义结构体需要使用 struct
关键字,格式如下:
1 | cCopy codestruct 结构体名称 { |
其中,结构体名称
是结构体的名称,成员名称
是结构体中每个数据成员的名称,可以根据需要自定义。例如,定义一个表示学生信息的结构体:
1 | cCopy codestruct student { |
上面的代码定义了一个名为 student
的结构体,其中包含三个成员:id
(学号,整型)、name
(姓名,字符型数组)和
age
(年龄,整型)。
访问结构体成员
结构体成员可以使用 .
运算符访问,格式如下:
1 | cCopy code |
例如,访问上面定义的 student
结构体的成员:
1 | cCopy codestruct student s; |
上面的代码创建了一个名为 s
的 student
结构体变量,并分别给其成员赋值。然后,使用 printf
函数输出结构体成员的值。
结构体数组
结构体数组是指由多个相同类型的结构体变量组成的数组,可以通过数组下标访问每个结构体变量,格式如下:
1 | cCopy code |
例如,定义一个包含三个学生信息的结构体数组:
1 | cCopy code |
结构体指针
结构体指针是指向结构体变量的指针,可以使用 ->
运算符访问结构体成员,格式如下:
1 | cCopy codestruct 结构体名称 *指针变量名; |
例如,定义一个指向 student
结构体变量的指针:
1 | cCopy codestruct student *p; |
上面的代码创建了一个指向 s
结构体变量的指针
p
,然后使用 ->
运算符访问结构体成员。
共用体(union)
共用体是一种特殊的数据类型,它可以将不同类型的数据存储在同一块内存空间中,使用
union
关键字定义共用体,格式如下:
1 | cCopy codeunion 共用体名称 { |
其中,共用体名称
是共用体的名称,成员名称
是共用体中每个数据成员的名称,可以根据需要自定义。例如,定义一个包含整型和字符型数组的共用体:
1 | cCopy codeunion data { |
上面的代码定义了一个名为 data
的共用体,其中包含两个成员:num
(整型)和
str
(字符型数组)。
访问共用体成员
共用体成员可以使用 .
运算符或者 ->
运算符访问,格式和结构体一样。
需要注意的是,共用体成员在内存中占用的空间是相同的,共用体的大小取决于占用空间最大的成员。
共用体与结构体的区别
共用体与结构体都是用户自定义的数据类型,但它们之间有几个重要的区别:
- 结构体中的每个成员都占用不同的内存空间,不同成员之间互不影响;而共用体中的成员占用同一块内存空间,不同成员之间共享内存空间。
- 结构体的大小取决于所有成员的大小之和,而共用体的大小取决于占用空间最大的成员的大小。
- 结构体和共用体在定义时使用的关键字不同,分别是
struct
和union
。
使用示例
下面是一个简单的使用共用体的示例:
1 | cCopy code#include <stdio.h> |
上面的代码定义了一个名为 data
的共用体,其中包含两个成员:num
(整型)和
str
(字符型数组)。然后,创建一个名为 d
的
data
共用体变量,并分别给其成员赋值。最后,使用
printf
函数输出共用体成员的值。
注意到共用体成员占用的是同一块内存空间,所以在修改一个成员的值后,另一个成员的值也会相应地发生改变。上面的示例中,先将
d.num
成员赋值为 10,然后使用 strcpy
函数将字符串 "hello"
赋值给 d.str
成员,最后输出 d.num
和 d.str
成员的值,发现
d.num
的值也发生了改变,因为它们占用的是同一块内存空间。
总结
本篇学习笔记介绍了 C
语言中结构体和共用体的定义和使用方法。结构体可以包含多个数据成员,不同成员之间占用不同的内存空间,通过
.
或 ->
运算符访问;共用体中的数据成员占用同一块内存空间,通过 .
或
->
运算符访问,大小取决于占用空间最大的成员。两者定义时使用的关键字分别为
struct
和
union
。需要注意的是,共用体的成员共享内存空间,修改一个成员的值会影响其他成员的值。