c 函式引數型別 引用

2021-09-30 12:49:56 字數 2071 閱讀 9797

在編寫個人函式的時候,你將會受到c++

中的一條基本的原則的限制:在預設的情況下,變數只能以值傳遞的方式傳遞給函式。這句話的意思是:被傳遞到函式的只是變數的值,永遠不是變數的本身。

例如:void changevar(int myvar,int newvalue)  

int main()  

結果為 20;

出現這種情況的原因是:在呼叫changevar

()函式時,程式只是把

main

()函式中的

mynum

變數的值賦值給了

changevar

()函式中的

myvar

變數,它們是兩個不同的變數。事實上,

changevar

()函式完全不知道在

main

()函式中還存在乙個

mynum

的變數,甚至連它的名字都不知道。

解決方法:

通過使用位址和指標

繞開「值傳遞

」問題的第乙個方法是向函式傳遞變數的位址而不是它的值。

int main()    

當然,changevar

()函式也要相應的改動。

void changevar(int* myvar,int newvalue)  

現在可以得到預期的結果90了。

這種交換在很多的排序演算法裡都要用到。

以「引用傳遞

」方式向函式傳遞引數

既然像這樣使用位址是一種很好的思路,讓這個概念更加完善豈不是更好?如果事先知道某個函式只能接受乙個位址,能不能按照某種套路來編寫有關的**以便在呼叫該函式時不需要使用特殊的語法呢?

引入引用傳遞方式輸入引數。

int a = 100;

int& b = a;

b = 1000;

考察: (1)&a與&b

的關係? 

(2) a=?

b現在是

a的乙個別名! 

a=1000;

1)引用必須在宣告時立即初始化,不允許空引用

2)引用一旦初始化,就不能再引用其它資料

3)引用和被引用的變數實際上代表同乙個記憶體的資料 

傳遞函式的引數和返回值.c++

中常用的方式有三種

值傳遞,

指標傳遞和引用傳遞

引用傳遞的性質象指標傳遞,

書寫形式象值傳遞,

理由:如果只需要借用一下別名

,就沒必要用指標,.

void changevar(int &myvar,int newvalue);

這個函式第乙個輸入的引數不是乙個指標,它是那個將被傳遞給這個函式的原始變數的乙個別名。在changevar

()函式裡對這個引數變數進行的任何操作都將反映在

changevar

()函式外的那個原始變數身上。這意味著

changevar

()函式與原來的一樣。

void changevar(int myvar,int newvalue){

myvar=newvalue;

這使得這個函式更容易被呼叫----

只需要提供乙個變數名;

int main(){

int mynum=20;

changevar(mynum,90);

這比值傳參語法上更簡單了。

以「引用傳遞」方式把引數值傳遞給乙個函式是

c++的新增功能,這可以讓函式的呼叫語法更加簡單清晰。

引用傳遞

」方式而不是以

「值傳遞

」方式返回: int &myfuntion();

2.除了可以改變有關變數的值,「

引用傳遞

」方式的另乙個好處是它的開銷相對要小一些:因為不需要在函式裡建立臨時變數來容納那些值,程式的記憶體佔用量當然會小一些。

3.如果想獲得「

引用傳遞

」方式帶來的效能改善,但不想改變某個變數的值,可以把相應的輸入引數定義為乙個常量:

void myfunc(const int &mynum);

通過這樣定義的函式,可以把具體的引數直接傳遞給它:myfunc(7);

C 引用型別作為函式引數時

在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...

C 引用型別作為函式引數時

在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...

C 引用型別作為函式引數時

在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...