程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++函數傳遞三種方式解讀

C++函數傳遞三種方式解讀

編輯:C++入門知識

C++編程語言中的函數可以以多種傳遞的方式來實現一些特定功能的實現。我們今天就為大家總結了這些傳遞方式,讓大家能夠對這方面的知識有一個深刻的理解。首先就讓我們一起來看看C++函數傳遞的相關方式吧、

C++函數傳遞的方式總共有三種,分別為:值傳遞、指針傳遞和引用傳遞。

值傳遞:

  1. void fun(int x)  
  2. {  
  3. x += 5; //修改的只是y在棧中copy x,x只是y的一個副本,在內存中重新開辟的
    一塊臨時空間把y的值送給了x;這樣也增加了程序運行的時間,降低了程序的效率。  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(y);  
  9. cout<<\"y = \"<<y<<endl; //y = 0;  

指針傳遞:

  1. void fun(int *x)  
  2. {  
  3. *x += 5; //修改的是指針x指向的內存單元值  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(&y);  
  9. cout<<<<\"y = \"<<y<<endl; //y = 5;  

引用傳遞:

  1. void fun(int &x)  
  2. {  
  3. x += 5; //修改的是x引用的對象值 &x = y;  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(y);  
  9. 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指向的內存單元,編譯器都將報錯

些時保護了指針的內存單元,也可以保護指針本身,防止其地址改變。

例如:

  1. void funstrcopy(char *strdest,const char *const strsrc) 

以上就是對C++函數傳遞的三種方式的介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved