结构体作为函数参数

梦想的初衷 提交于 2019-12-11 05:56:55

结构体作为函数参数

当结构体作为函数参数时,参数传递的方式为“传值调用”,即将当前的值复制一份给函数的接口参数。
示例如下:

/*
* 需求:给定2个学生的信息,包括姓名、学号及5门课的成绩,要求利用函数计算每个学生的平均成绩
*
*/
#include <stdio.h>
// 定义结构体类型
struct Student 
{
	char name[100];
	long num;
	float grades[5];
	float ave;
} ;

void calc_average(struct Student s);  // 计算单个学生的平均成绩
void calc_array_average(struct Student s[]);  // 对多个学生计算每个人的平均成绩

int main()
{
	int i;
	struct Student s[2] = {  //声明并初始化2个学生的数据
			{
				"ZhangSan", 10001, {60,70,80,90,100}, 0
			},
			{
				"Lisi", 10002, {60, 70, 60, 70, 60}, 0 
			}
		};
	// calc_array_average(s[0]); // 计算单个学生的平均成绩,参数为单个结构体,此时输出的结果为0
	calc_array_average(s);  // 将结构体数组作为参数,为每个学生计算平均成绩,此时能得到正确的结果
	for (i = 0; i < 2; i++) // 输出每个学生的平均成绩
		printf("s[%d].ave=%f\n", i, s[i].ave);	
	return 0;
}

void calc_average(struct Student s)  // 传值调用
{
	int i;
	float sum = 0;
	for (i = 0; i < 5; i++)
		sum += s.grades[i];
	s.ave = sum / 5;
}
void calc_array_average(struct Student s[])  // 传引用调用,因为数组名是常量指针,传递的是地址
{
	int i, j;
	float sum = 0;
	for (i = 0; i < 2; i++)
	{
		for (j = 0,sum = 0; j < 5; j++)
		{
			sum += s[i].grades[j];
		}
		s[i].ave = sum / 5;
	}
	return;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!