您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-14 19:27 573 查看
本文包括两个版本,都讲到了参数传递和指针传递,作者水平有限,如有不足之处,敬请指正!

一、

//<<<<<<<结构体的参数传递和指针传递>>>>>>>
//作者: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;
b343
}

//定义函数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函数里打印
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: