我們在前面的一些章節中知道,變數作為函式的引數,了解它是值傳遞還是位址傳遞是非常重要的。因為這意味著引數在函式體內的修改是否會影響到該變數本身。
不同於陣列,結構是按值傳遞的。也就是說整個結構的內容都複製給了形參,即使某些成員資料是乙個陣列。
下面,我們就以乙個例項來證明這一點:(程式9.3.1)
#include "iostream.h"
struct student
;void display(student arg);//結構作為引數
int main()
;//宣告s1,並對s1初始化
cout <<"s1.name的位址" <<&s1.name <
display(s1);
cout <<"形參被修改後……" <
display(s1);
return 0;
}void display(student arg)
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
通過上面這個程式,我們發現在函式中修改形參的值對實參是沒有影響的。並且通過輸出變數s1和引數arg的成員資料name所在位址,我們可以知道兩者是不相同的,即整個name陣列也複製給了引數arg。
如果我們希望能在函式修改實參,則可以使用引用的方法。
由於結構往往整合了許多的成員資料,它的資料量也絕對不可小覷。使用值傳遞雖然能夠保護實參不被修改,但是卻會或多或少地影響到程式的執行效率。
所以,一般情況下,我們選擇引用傳遞的方法。
一般情況下,函式只能返回乙個變數。如果要嘗試返回多個變數,那麼就要通過在引數中使用引用,再把實參作為返回值。然而,這種方法會導致一大堆引數,程式的可讀性也較差。
當結構出現以後,我們可以把所有需要返回的變數整合到乙個結構中來,問題就解決了。我們通過一段程式來了解如何讓函式返回乙個結構:(程式9.3.2)
#include "iostream.h"
struct student
;student initial();//初始化並返回乙個結構
void display(student arg);
int main()
void display(student arg)
student initial()
;//初始化結構變數
return s1;//返回結構
}執行結果:
學號:428004姓名:tomato年齡:20
院系:computerscience成績:84.5
結構體作為函式引數(值傳遞,引用傳遞,指標傳遞)
一 值傳遞 include include using namespace std struct student void outcome student s 引用傳遞不會進行記憶體重新分配,因此和指標傳參類似,效率很高 void outcome student s 引用傳參 outcome stu...
結構體作為函式引數
c語言中結構體在函式中的應用 前兩天在編寫一段 時突然對結構體在函式中的用法有些模糊了,經過複習,基本弄清了這些知識,特總結如下 一 結構體與函式引數 結構体作函式引數可分為 傳值與傳指標。1 傳值時結構體引數會被拷貝乙份,在函式體內修改結構體引數成員的值實際上是修改呼叫引數的乙個臨時拷貝的成員的值...
結構體作為函式引數
結構體巨集觀上可以當做變數看待,可以作為函式引數,也可以作為函式返回值。再軟體程式設計上的使用,可以與c 的類,封裝的功能平分天下。將乙個結構體變數中的資料傳遞給另乙個函式,有下列 3種方法 用結構體變數名作引數。一般較少用這種方法。用指向結構體變數的指標作實參,將結構體變數的位址傳給形參。用結構體...