【例9-3】结构体变量的引用

  • Post author:
  • Post category:其他


(三)结构体变量的引用

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 版权协议,转载请附上原文出处链接和本声明。