C 學習 引用作為函式引數

2021-07-05 11:44:20 字數 2347 閱讀 7477

在我們的程式設計過程中,我們經常將引用用作函式引數, 使得函式中的變數名成為呼叫程式中的變數的別名.這種傳遞引數的方法成為按引用傳遞.

但是在函式中使用引用,往往會改變被引用物件的值.所以引入const.將引用引數宣告為常量資料的引用的理由有三個:

(1) 使用const可以避免無意中修改資料的程式設計錯誤;

(2) 使用const使函式能夠處理const和非const實參,否則只能接收非const實參;

(3) 使用const引用使函式能夠正確生成並使用臨時變數.

下面是將引用用於結構的例子:

// strc_ref.cpp -- using structure references

#include #include struct free_throws

;void display(const free_throws &ft);

void set_pc(free_throws &ft);

free_throws &accumulate(free_throws &target,const free_throws &source);

int main()

; free_throws two = ;

free_throws three = ;

free_throws four = ;

free_throws five = ;

free_throws team = ;

// no initialization

free_throws dup;

set_pc(one);

display(one);

accumulate(team,one);

display(team);

// use return value as argument

display(accumulate(team,two));

accumulate(accumulate(team,three),four);

display(team);

// use return value in argument

dup = accumulate(team,five);

std::cout << "displaying team:\n";

display(team);

std::cout << "displaying dup after assignment:\n";

display(dup);

set_pc(four);

// ill-advised assignment

// 這條語句在這裡是可行的,因為函式的返回值是乙個引用;如果

// 函式按值返回,這裡將不能通過編譯

accumulate(dup,five) = four;

std::cout << "displaying dup after ill-advised assignment:\n";

display(dup);

return 0;}/*

* 函式名稱: display()

* 功能描述: 使用const 引用引數,顯示結構的內容,而不修改它;

* 也可使用按值傳遞,但與複製原始資料的拷貝相比,

* 使用引用可以節省時間和記憶體;

*/void display(const free_throws &ft)

/* * 函式名稱: set_pc()

* 功能描述: 形參ft為引用,ft指向實際引用的變數,在這裡按值傳遞不可用;

* 可以使用指標傳遞

*/void set_pc(free_throws &ft)

#if 0

// 如果使用指標進行引數傳遞,呼叫時,set_pc(&one)

void set_pc(free_throws *pt)

#endif

free_throws &accumulate(free_throws &target, const free_throws &source)

引申問題:

(1)為何要返回引用?

如果正常按值返回,先是return後面的表示式計算,然後把計算結果複製到乙個臨時位置,然後再將這個臨時拷貝值賦給儲存變數;

而引用是直接將被引用物件複製給儲存變數.

(2)返回引用時需要注意的問題?

最重要的一點是,避免返回函式終止時不再存在的記憶體單元引用.(避免這種問題的最簡單方法就是返回乙個作為引數傳遞給函式的引用.另一種方法就是用new來分配新的記憶體空間,並返回指向該記憶體空間的指標)

(3)為何將const用於引用返回型別?

避免accumulate(dup,five) = four;這種用法的出現,將返回值型別宣告為const型別.

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。到目前為止我們介紹過函式引數傳遞的兩種情況。1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實...

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...

C 引用作為函式引數

c c 入門教程 c 指標 上一節 下一節 分享到 qq空間 豆瓣 人人網 width 728 height 90 frameborder 0 marginwidth 0 marginheight 0 vspace 0 hspace 0 allowtransparency true scrollin...