<C语言>结构体的参数传递和指针传递(注释详解)

本文包括两个版本,都讲到了参数传递和指针传递,作者水平有限,如有不足之处,敬请指正!

一、

//<<<<<<<结构体的参数传递和指针传递>>>>>>>
//作者:wsg
//时间:2017年8月14日
//版本一:皆采用函数返回值为整个结构体的方式

#include <stdio.h>

struct gas
{
	float distance;
	float gals;
	float mpg;     //题目定义:mpg = distance * gals
};

struct gas func1(struct gas str);   //申明函数func1()
struct gas func2(struct gas *ptr);  //申明函数func2()

int main(int argc, char *argv[])
{
	//定义并输入distance的值
	float distance; 
	printf("请输入distance的值(带小数):\n");
	scanf("%f", &distance);
	
	//定义并输入gals的值
	float gals;
	printf("请输入gals的值(带小数):\n");
	scanf("%f", &gals);
	
	//将distance的值和gals的值(float型)赋给结构体str
	struct gas str = {.distance = distance, .gals = gals};
	
	//func1()函数传参,传递整个结构体
	str = func1(str);
	printf("mpg1 = %f\n", str.mpg);  //打印mpg的值
	
	//func2函数传参,传递一个地址进去,这里传递整个结构体的地址
	str = func2(&str);
	printf("mpg2 = %f\n", str.mpg);  //打印mpg的值
	
	return 0;
}

//定义函数func1(),形参为整个结构体,返回值也为整个结构体
struct gas func1(struct gas str) 
{
	str.mpg = (str.distance)*(str.gals);
	return str;  //返回值为整个结构体
}

//定义函数func2(),形参为一个指针,应传递一个地址
struct gas func2(struct gas *ptr)
{
	ptr->mpg = (ptr->distance)*(ptr->gals);
	return *ptr; //返回值为指针ptr解引用,相当于整个结构体
}


二、

//<<<<<<<结构体的参数传递和指针传递>>>>>>>
//作者:wsg
//时间:2017年8月14日
//版本二:使用指针传递时,不采用返回值方式

#include <stdio.h>

struct gas
{
	float distance;
	float gals;
	float mpg; //mpg = distance * gals
};

struct gas func1(struct gas str);
void func2(struct gas *ptr);

int main(int argc, char *argv[])
{
	//输入distance的值
	float distance; 
	printf("请输入distance的值:\n");
	scanf("%f", &distance);
	
	//输入gals的值
	float gals;
	printf("请输入gals的值:\n");
	scanf("%f", &gals);
	
	//将distance的值和gals的值赋给结构体str
	struct gas str = {.distance = distance, .gals = gals};
	
	//func1函数传参
	str = func1(str);
	printf("mpg1 = %f\n", str.mpg);
	
	//函数func2传参
	func2(&str);

	
	return 0;
}

//定义函数func1(),形参为整个结构体,返回值也为整个结构体
struct gas func1(struct gas str)
{
	str.mpg = (str.distance)*(str.gals);
	return str;
}

//定义函数func2(),形参为一个指针,应传递一个地址,由于该函数是void类型,所以没有返回值
void func2(struct gas *ptr)
{
	ptr->mpg = (ptr->distance)*(ptr->gals);
	printf("mpg2 = %f\n", ptr->mpg);  //无返回值,只能在函数内部打印,而不能在main函数里打印
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值