C語言的結(jié)構(gòu)體(篇章之二)

結(jié)構(gòu)體與函數(shù)

一、結(jié)構(gòu)體作為函數(shù)的參數(shù)

【一】、傳值調(diào)用方式
在函數(shù)之間直接傳遞結(jié)構(gòu)體類型的數(shù)據(jù)——傳值調(diào)用方式。
當(dāng)結(jié)構(gòu)體作參數(shù)或返回值時(shí),會(huì)發(fā)生同名復(fù)制。
而且同類型結(jié)構(gòu)體間,是可以相互賦值的。在具體應(yīng)用中,把函數(shù)的形參定義為結(jié)構(gòu)體變量,函數(shù)調(diào)用時(shí),將主調(diào)函數(shù)的實(shí)參傳遞給被調(diào)函數(shù)的形參。
eg:
【例題】利用結(jié)構(gòu)體變量作函數(shù)的參數(shù)的傳值調(diào)用方式來計(jì)算三角形的面積。
#include "math.h"
#include "stdio.h"
typedef struct triangle //定義結(jié)構(gòu)體類型
{
float a,b,c;
} Area ;
//自定義函數(shù)
float area(Ara side1)
{
float l,s;
l=(side1.a+side1.b+side1.c)/2; //計(jì)算三角形的半周長(zhǎng)
s=sqrt(l(l-side1.a)(l-side1.b)*(l-side1.c)); //計(jì)算三角形的面積公式
return s; //返回三角形的面積s的值到主調(diào)函數(shù)中
}
//程序入口
void main()
{
float s;
Area side;
printf("輸入三角形的3條邊長(zhǎng):\n");
scanf("%f %f %f",&side.a,&side.b,&side.c); //從鍵盤輸入三角形的三邊長(zhǎng)
s=area(side); //調(diào)用自定義函數(shù)
printf("面積是: %f\n",s);
}
【二】、傳址調(diào)用方式
在函數(shù)之間傳遞結(jié)構(gòu)體指針——傳址調(diào)用方式
運(yùn)用指向結(jié)構(gòu)體類型的指針變量作為函數(shù)的參數(shù),將主調(diào)函數(shù)的結(jié)構(gòu)體變量的指針(實(shí)參)傳遞給被調(diào)函數(shù)的結(jié)構(gòu)體指針(形參),利用作為形參的結(jié)構(gòu)體指針來操作主調(diào)函數(shù)中的結(jié)構(gòu)體變量及其成員,達(dá)到數(shù)據(jù)傳遞的目的。
eg:
跟上面的題一樣的條件,利用結(jié)構(gòu)體指針作參數(shù)求三角形的面積(寫了核心的幾句)

float area(Area *p)
{
float l,s;
l=(p->a+p->b+p->c)/2;   //計(jì)算三角形的半周長(zhǎng)
s=sqrt(l*(l-p->a)*(l-p->b)*(l-p->c));  //計(jì)算三角形的面積公式
return s;
}

二、結(jié)構(gòu)體作為函數(shù)的返回值

一般情況下,一個(gè)函數(shù)只能有一個(gè)返回值。
但是如果函數(shù)確實(shí)需要帶回多個(gè)返回值的話,可以利用全局變量或指針來進(jìn)行解決。在結(jié)構(gòu)體中可以在被調(diào)函數(shù)中利用return語句將一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)結(jié)果返回到主調(diào)函數(shù)中,從而得到多個(gè)返回值。

還是以求三角形的例子來引申吧。(還是只寫核心的部分語句)

 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,971評(píng)論 1 19
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,614評(píng)論 3 44
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,674評(píng)論 1 51
  • C語言大總結(jié) 一、基礎(chǔ): 1、進(jìn)制、位權(quán)、1字節(jié)等于8位(位是計(jì)算機(jī)的最小儲(chǔ)存單位,字節(jié)是計(jì)算機(jī)最小存儲(chǔ)單元)、十...
    霧中探雪閱讀 2,938評(píng)論 1 36
  • 紅線是一條曲折到無法彎曲的直線
    火山wj閱讀 105評(píng)論 0 0

友情鏈接更多精彩內(nèi)容