结构体作为函数参数

结构体作为函数参数

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

/*
* 需求:给定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;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值