结构体类型数据在函数之间的传递
函数之间不仅可以使用基本数据类型及其数组参数进行数据传递,也可以使用结构体类
型及其数组参数进行数据传递,传递方式与基本数据类型参数是相同的。
结构体变量在函数之间传递数据
使用结构体类型的変量作为参数进行函数之间的数据传递时,注意以下问题
(1)主调函数的实参和被调函数的形参是相同结构体类型声明的变量。
(2)实参结构体变量向形参结构体变量传值时,依然是单向值传递,实参和形参变量分配
不同的内存空间,被调函数运行期间对形参结构体变量进行的修改不影响实参结构体变量。
(3)结构体变量也可以作为函数的返回值,使用 return语句从被调函数返回一个结构体变
量的值。
例:定义结构体类型表示圆,定义函数计算一个圆的面积并返回结构体变量。
#include<stdio.h>
#define PI 3.14159
struct circle
{
int x;
int y;
double radius;
double area;
};
struct circle getarea(struct circle c);
int main()
{
struct circle c1={,,12.5,},c2;
c2=getarea(c1);
printf("c1:%d,%d,%.2f,%.2f\n",c1.x,c1.y,c1.radius,c1.area);
printf("c2:%d,%d,%.2f,%.2f\n",c2.x,c2.y,c2.radius,c2.area);
return ;
}
struct circle getarea(struct circle c)
{
c.area=PI*c.radius*c.radius;
return c;
}
程序运行结果:
运行结果分析:从程序的运行结果可以看出,main函数中的实参c1把它的值传递给函数getarea的形参c,函数运行过程中计算并修改了c的成员area的值。由于参数的单向传递,形参c的变化没有影响实参c1。函数 getarea把形参c的值作为返回值,main函数中把返回值赋给了变量c2。