您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++中函數傳遞的方式是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++中函數傳遞的方式是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
值傳遞:
void fun(int x)
{
x += 5; //修改的只是y在棧中copy x,x只是y的一個副本,在內存中重新開辟的
一塊臨時空間把y的值送給了x;這樣也增加了程序運行的時間,降低了程序的效率。}
void main(void)
{
int y = 0;
fun(y);
cout<<\"y = \"<<y<<endl; //y = 0;
}
指針傳遞:
void fun(int *x) { *x += 5; //修改的是指針x指向的內存單元值 } void main(void) { int y = 0; fun(&y); cout<<<<\"y = \"<<y<<endl; //y = 5; }
引用傳遞:
void fun(int &x) { x += 5; //修改的是x引用的對象值 &x = y; } void main(void) { int y = 0; fun(y); cout<<<<\"y = \"<<y<<endl; //y = 5; }
看了C++函數傳遞后我們繼續來談“const只能用于修飾輸入參數”的情況。
C++可變參數表基本內容探討
各個C++內存區域功能對比
C++ static不同的應用方式
C++輸入輸出漢字具體應用技巧分享
C++地址運算符相關內容詳解
當輸入參數用“值傳遞”方式時,我們不需要加const修飾,因為用值傳遞時,函數將自動用實際參數的拷貝初始化形式參數,當在函數體內改變形式參數時,改變的也只是棧上的拷貝而不是實際參數。
但要注意的是,當輸入參數為ADT/UDT(用戶自定義類型和抽象數據類型)時,應該將“值傳遞”改為“const &傳遞”,目的可以提高效率。
例如:
void fun(A a); //效率底。函數體內產生A類型的臨時對象用于復制參數 a,但是臨時對象的構造、復制、析構過程都將消耗時間。
void fun(A const &a); //提高效率。用“引用傳遞”不需要產生臨時對象,省了臨時對象的構造、復制、析構過程消耗的時間。但光用引用有可能改變a,所以加const
當輸入參數用C++函數傳遞中的“指針傳遞”方式時,加const修飾可防止意外修改指針指向的內存單元,起到保護作用。
例如:
void funstrcopy(char *strdest,const char *strsrc) //任何改變strsrc指向的內存單元,編譯器都將報錯
些時保護了指針的內存單元,也可以保護指針本身,防止其地址改變。
例如:
void funstrcopy(char *strdest,const char *const strsrc)
讀到這里,這篇“C++中函數傳遞的方式是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。