(三)结构体变量的引用
1.
引用结构体变量成员
若定义了一个结构体变量和一个指向结构体变量的指针,则有以下三种引用形式:
(1)
结构体变量.成员名
//利用成员运算符”.”访问 //演示1
(2)
(*结构体指针).成员名
//利用指针运算符”*”和成员运算符”.”访问 //演示2
(3)
结构体指针->成员名
//利用指针和指向运算符”->”访问 //演示2
2.引用整个结构体变量
相同类型的结构体变量之间可以进行整体赋值 //演示3
//结构体变量成员的引用演示1:
结构体变量.成员名
#include<stdio.h>
int main()
{
struct job_exam
{
unsigned num;
char name[10];
int exama;
int examb;
int total;
}a = { 1501,"王虎",89,92 };
a.total = a.exama + a.examb; //结构体变量.成员名
printf("编号 姓名 笔试 面试 总成绩\n");
printf("%4u %6s %5d %6d %7d", a.num, a.name, a.exama, a.examb, a.total);
return 0;
}
//结构体变量成员的引用演示2:
(*结构体指针).成员名
结构体指针->成员名
#include<stdio.h>
int main()
{
struct job_exam
{
unsigned num;
char name[10];
int exama;
int examb;
int total;
}*p, s[3] = { {1501,"王虎",89,92},
{1502,"李雪",87,96},
{1503,"张扬",82,85} };
p = s; //结构体指针p指向结构体数组首地址
printf("编号 姓名 笔试 面试 总成绩\n");
//(*结构体指针).成员名
for (int i = 0; i < 3; i++)
{
(*p).total = (*p).exama + (*p).examb;
printf("%4u %6s %5d %6d %7d\n", (*p).num, (*p).name, (*p).exama, (*p).examb, (*p).total);
p++;
}
printf("\n");
p = s; //上一个for 循环使指针p的值发生了变化,此处再次重置为s(输出乱码我才想到。。)
//结构体指针->成员名
for (int i = 0; i < 3; i++)
{
p->total = p->exama + p->examb;
printf("%4u %6s %5d %6d %7d\n", p->num, p->name, p->exama, p->examb, p->total);
p++;
}
return 0;
}
//演示3:引用结构体变量整体
#include<stdio.h>
int main()
{
struct Student
{
char *name;
int age;
};
struct Student stu_1 = { "李华",22 };
struct Student stu_2 = stu_1; //直接将结构体变量stu_1整体赋值给stu_2
printf("%s的年龄是%d", stu_2.name, stu_2.age);
return 0;
}
//随堂练习9-1
为例9-2中演示2的结构体变量a、b输入各成员值,交换a和b的数据后输出。
例9-2演示2的源程序
#include<stdio.h>
int main()
{
struct job_exam
{
unsigned num;
char name[10];
int exama;
int examb;
int total;
}a, b, s[3], * p; //定义的结构体变量要写在";"前
return 0;
}
//根据题目要求修改后的源程序
#include<stdio.h>
int main()
{
struct job_exam
{
unsigned num;
char name[10];
int exama;
int examb;
int total;
}a = { 1501,"王虎",89,92,181 }, b = { 1502,"李雪",87,96,183 }, r;
r = a;
a = b;
b = r;
printf("编号 姓名 笔试 面试 总成绩\n");
printf("%4u %6s %5d %6d %7d\n", a.num, a.name, a.exama, a.examb, a.total);
printf("%4u %6s %5d %6d %7d\n", b.num, b.name, b.exama, b.examb, b.total);
return 0;
}
版权声明:本文为zgc_1026999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。