C语言C语言的结构体(篇章之二)

结构体与函数

一、结构体作为函数的参数

【一】、传值调用方式
在函数之间一贯传送结构体类型的数据——传值调用形式。
当协会体作参数或再次来到值时,会生出同名复制。
并且同种类结构体间,是足以互相赋值的。在具体采取中,把函数的形参定义为结构体变量,函数调用时,将主调函数的实参传递给被调函数的形参。
eg:
【例题】利用结构体变量作函数的参数的传值调用形式来计算三角形的面积。
#include “math.h”
#include “stdio.h”
typedef struct triangle //定义结构体类型
{
float a,b,c;
} Area ;
//自定义函数
float area(Ara side1)
{
float l,s;
l=(side1.a+side1.b+side1.c)/2; //总括三角形的半周长
s=sqrt(l(l-side1.a)(l-side1.b)*(l-side1.c)); //总结三角形的面积公式
return s; //重返三角形的面积s的值到主调函数中
}
//程序入口
void main()
{
float s;
Area side;
printf(“输入三角形的3条边长:\n”);
scanf(“%f %f %f”,&side.a,&side.b,&side.c); //从键盘输入三角形的三边长
s=area(side); //调用自定义函数
printf(“面积是: %f\n”,s);
}
【二】、传址调用格局
在函数之间传递结构体指针——传址调用方式
应用指向结构体类型的指针变量作为函数的参数,将主调函数的结构体变量的指针(实参)传递给被调函数的结构体指针(形参),利用作为形参的结构体指针来操作主调函数中的结构体变量及其成员,达到多少传递的目标。
eg:
跟上边的题一样的基准,利用结构体指针作参数求三角形的面积(写了骨干的几句)

float area(Area *p)
{
float l,s;
l=(p->a+p->b+p->c)/2;   //计算三角形的半周长
s=sqrt(l*(l-p->a)*(l-p->b)*(l-p->c));  //计算三角形的面积公式
return s;
}

二、结构体作为函数的重回值

诚如景况下,一个函数只可以有一个返回值。
唯独如若函数确实需求带回四个重临值的话,可以选拔全局变量或指针来进展缓解。在结构体中得以在被调函数中使用return语句将一个结构体类型的数据结果回到到主调函数中,从而获取五个重临值。

或者以求三角形的例证来引申吧。(依旧只写主旨的一部分语句)

 struct cir_area result;
 result.l=(a+b+c)/2;
 result.s=sqrt(result.l*(result.l-a)*(result.l-b)*(result.l-c));
 return result;  //返回了l和s