国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++結構體與函數(shù)—結構體作為函數(shù)參數(shù)和返回值

2020-05-23 14:27:01
字體:
來源:轉載
供稿:網(wǎng)友
結構也可以用作函數(shù)參數(shù)或返回值。

結構作為參數(shù)

我們在前面的一些章節(jié)中知道,變量作為函數(shù)的參數(shù),了解它是值傳遞還是地址傳遞是非常重要的。因為這意味著參數(shù)在函數(shù)體內的修改是否會影響到該變量本身。

不同于數(shù)組,結構是按值傳遞的。也就是說整個結構的內容都復制給了形參,即使某些成員數(shù)據(jù)是一個數(shù)組。

下面,我們就以一個實例來證明這一點:(程序9.3.1)
#include "iostream.h"
struct student
{
   int idNumber;
   char name[15];
   int age;
   char department[20];
   float gpa;
};
void display(student arg);//結構作為參數(shù)
int main()
{
   student s1={428004, "Tomato",20, "ComputerScience",84.5};//聲明s1,并對s1初始化
   cout <<"s1.name的地址" <<&s1.name <<endl;
   display(s1);
   cout <<"形參被修改后……" <<endl;
   display(s1);
   return 0;
}
void display(student arg)
{
   cout <<"學號:" <<arg.idNumber <<"姓名:" <<arg.name <<"年齡:" <<arg.age <<endl <<"院系:" <<arg.department <<"成績:" <<arg.gpa <<endl;
   cout <<"arg.name的地址" <<&arg.name <<endl;
   for (int i=0;i<6;i++)//企圖修改參數(shù)的成員數(shù)據(jù)
   {
      arg.name[i]='A';
   }
   arg.age++;
   arg.gpa=99.9f;
}
運行結果:
s1.name的地址0x0012FF54
學號:428004姓名:Tomato年齡:20
院系:ComputerScience成績:84.5
arg.name的地址0x0012FED8
形參被修改后……
學號:428004姓名:Tomato年齡:20
院系:ComputerScience成績:84.5
arg.name的地址0x0012FED8

通過上面這個程序,我們發(fā)現(xiàn)在函數(shù)中修改形參的值對實參是沒有影響的。并且通過輸出變量s1和參數(shù)arg的成員數(shù)據(jù)name所在地址,我們可以知道兩者是不相同的,即整個name數(shù)組也復制給了參數(shù)arg。

如果我們希望能在函數(shù)修改實參,則可以使用引用的方法。由于結構往往整合了許多的成員數(shù)據(jù),它的數(shù)據(jù)量也絕對不可小覷。使用值傳遞雖然能夠保護實參不被修改,但是卻會或多或少地影響到程序的運行效率。所以,一般情況下,我們選擇引用傳遞的方法。

結構作為返回值

一般情況下,函數(shù)只能返回一個變量。如果要嘗試返回多個變量,那么就要通過在參數(shù)中使用引用,再把實參作為返回值。然而,這種方法會導致一大堆參數(shù),程序的可讀性也較差。
當結構出現(xiàn)以后,我們可以把所有需要返回的變量整合到一個結構中來,問題就解決了。我們通過一段程序來了解如何讓函數(shù)返回一個結構:(程序9.3.2)
#include "iostream.h"
struct student
{
   int idNumber;
   char name[15];
   int age;
   char department[20];
   float gpa;
};
student initial();//初始化并返回一個結構
void display(student arg);
int main()
{
   display(initial());//輸出返回的結構
   return 0;
}
void display(student arg)
{
   cout <<"學號:" <<arg.idNumber <<"姓名:" <<arg.name <<"年齡:" <<arg.age <<endl <<"院系:" <<arg.department <<"成績:" <<arg.gpa <<endl;
}
student initial()
{
   student s1={428004, "Tomato",20, "ComputerScience",84.5};//初始化結構變量
   return s1;//返回結構
}

運行結果:
學號:428004姓名:Tomato年齡:20
院系:ComputerScience成績:84.5
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辛集市| 綦江县| 南木林县| 平舆县| 乌拉特中旗| 华阴市| 台山市| 巴林左旗| 苏州市| 邵武市| 平乐县| 长顺县| 加查县| 儋州市| 淅川县| 和平县| 吐鲁番市| 义马市| 扶风县| 崇文区| 青浦区| 莱州市| 宁津县| 罗田县| 宜章县| 成武县| 鄂托克旗| 鲁甸县| 长岛县| 吴川市| 津南区| 古丈县| 浮山县| 云南省| 太谷县| 海阳市| SHOW| 永靖县| 沧源| 道孚县| 右玉县|