天天看點

C++函數傳遞參數的方式

1、值傳遞

當進行值傳遞時,就是将實參的值複制到形參中,而實參和形參不是在同一個存儲單元,是以函數調用結束後,實參的值不會發生改變。

#include<iostream>
using namespace std;
void swap(int a,int b)
{
      int temp;
      temp=a;
      a=b;
      b=temp;
      cout<<a<<","<<b<<endl;
}

int main()
{
     int x=;
     int y=;
     swap(x,y);
     cout<<x<<","<<y<<endl;
     return ;
}
//程式的輸出結果為
//2,1
//1,2
           

2、指針傳遞

當進行指針傳遞時,形參是指針變量,實參是一個變量的位址,調用函數時,形參(指針變量)指向實參變量的單元,在函數中改變的不是實參的值,而是實參位址所指向的變量的值。

#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
      int temp;
      temp=*a;
      *a=*b;
      *b=temp;
      cout<<*a<<","<<*b<<endl;
}

int main()
{
     int x=;
     int y=;
     swap(&x,&y);
     cout<<x<<","<<y<<endl;
     return ;
}
//程式的輸出結果為
//2,1
//2,1
           

3、傳引用

實參位址傳遞給形參,使形參的位址取實參的位址,進而使形參與實參共享同一單元的方式。

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
      int temp;
      temp=a;
      a=b;
      b=temp;
      cout<<*a<<","<<*b<<endl;
}

int main()
{
     int x=;
     int y=;
     swap(x,y);
     cout<<x<<","<<y<<endl;
     return ;
}
//程式的輸出結果為
//2,1
//2,1
           

4、全局變量傳遞

這裡的“全局”變量并不見得就是真正的全局,隻要這個變量的作用域足夠這兩個函數通路就可以了,比如一個類中的兩個成員函數可以使用一個成員變量實作參數傳遞,或使用static關鍵字定義,或使用namespace進行限定等,而這裡的成員變量在這種意義下就可成為“全局”變量。當然也可以使用一個類外的真正的全局變量來實作參數傳遞。

全局變量傳遞的優點是效率高,但它對多線程的支援不好。

繼續閱讀