学科分类
目录
C语言

直接访问结构体变量的成员

直接访问结构体变量的成员可以通过“.”运算符实现,其格式如下所示:

结构体变量名.成员名;

例如,前面章节定义了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'};         //只初始化一部分成员
点击此处
隐藏目录