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

来源:互联网 发布:mysql如何导出sql文件 编辑:程序博客网 时间:2024/05/16 14:34

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

一、

//<<<<<<<结构体的参数传递和指针传递>>>>>>>//作者: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型)赋给结构体strstruct 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的值赋给结构体strstruct 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函数里打印}