直接访问结构体变量的成员
直接访问结构体变量的成员可以通过“.”运算符实现,其格式如下所示:
结构体变量名.成员名;
例如,前面章节定义了struct Person结构体变量p,根据上述格式访问变量p中的成员name,示例代码如下:
p.name;
为了帮助大家更好地掌握结构体变量成员的访问,接下来通过一个案例输出结构体变量p成员的值,如例1所示。
例1 disMem.c
1 #include <stdio.h>
2 struct Person //定义结构体类型struct Person
3 {
4 int ID;
5 char name[10];
6 char sex;
7 };
8 int main()
9 {
10 struct Person p = { 0001,"Zhang San",'M' }; //定义结结构体变量p
11 printf("ID:%04d\n", p.ID); //输出成员ID
12 printf("name:%s\n", p.name); //输出成员name
13 printf("sex:%c\n", p.sex); //输出成员sex
14 return 0;
15 }
例1运行结果如图1所示。
图1 例1运行结果
在例1中,第2~7行代码定义了结构体类型struct Person;第10行代码定义了struct Person结构体变量p,并对其进行了初始化;第11~13行代码分别输出了变量p的各个成员值。由图9-4可知,通过“.”运算符成功访问到了struct Person结构体变量成员。
通过“.”运算符可以访问结构体变量成员,那么也可以通过这种方式修改结构体成员变量的值,例如,修改struct Person结构体变量p中成员的值,示例代码如下:
char arr[20] = "lisi"; //定义字符数组
p.ID = 002; //修改成员ID的值
strcpy(p.name, arr); //修改成员name的值
p.sex = 'F'; //修改成员sex的值
上述代码中,通过“.”运算符访问并修改了struct Person结构体变量p中各成员的值。需要注意的是,成员name是一个字符数组,存储的是一个字符串,为字符数组赋值时不能简单的对数组名name赋值,要通过字符串操作函数完成相应操作。
小提示:通过“.”运算符初始化结构体变量
在初始化结构体变量时,也可以通过“.”运算符指定要初始化的成员变量,这就解决了未按照顺序初始化各成员变量时编译器匹配错误的问题。示例代码如下:
struct Person p = { .name="chenwu",.sex='F', .ID=0006 }; //未按顺序初始化
struct Person p = { .name="chenwu",.sex='F'}; //只初始化一部分成员