實參到形參的傳遞

2021-08-15 16:15:12 字數 2950 閱讀 9130

函式呼叫時,實參傳遞到形參時的轉換問題?

要點:

void swap(int x, int y)  

int main()

void swap(int

*px, int

*py)

int main()

程式中,雖然pa始終指向a,pb始終指向b,但是a與b的值已發生了交換。

int plus(int x,int y)  

int main()

當然,使用const實參初始化const形參肯定是沒有問題的。

int plus(const

int x,const

int y)

int main()

int plus(const

int x,const

int y)

int main()

但是,如果你想在程式中修改形參的值,就會報錯:

int plus(const

int x,const

int y)

// 編譯無法通過。

複製實參的不適合的情況:

1.需要在函式中修改實參的值

2.沒有辦法實現引數的複製(比如陣列)

3.當使用大型物件作為引數傳遞時,複製物件付出的代價太大。

void swap(int &x,int &y)  

int main()

#include 

#include

using

namespace

std;

vector

::const_iterator find_value(vector

::const_iterator beg, //起始位置

vector

::const_iterator end,//結束為止

int value, //要尋找的值

vector

::size_type &occurs) //出現次數

++occurs;

} }

return res_iter;

} int main()

bool findchar(const

string &s, const

char c)

時,你可以在程式中直接使用字串來呼叫函式

int main()  

而去掉const以後:

bool findchar( string  &s,  char c)  

bool flag = findchar("thefutureisours",'a');

就會報錯,你只能使用,

string word = 「thefutureisours」;

bool flag = findchar(word,』a』);

來呼叫函式了。

void printvaules(const

int a[10])

; printvaules(value);

return

0;

}

程式中,printvaules假定陣列有10個元素,但是如果陣列長度不為10,雖然程式能夠編譯並執行,但是第3個數以後的列印資訊卻不是我們希望的。

由此可見,非引用陣列的形參只會檢查實參與形參的陣列具有相同的型別,而不會檢查陣列中的個數是否匹配。

如果使用的是引用陣列,則編譯器會檢查形參中陣列的元素個數與實參是否匹配:

void printvaules(const

int (&a)[10])

; printvaules(value);

就不會通過編譯了。

這樣做雖然能夠避免出現錯誤的結果,但還是沒有真正的解決問題:要想真正做到正確的實現函式的功能,通常有三種做法:

第一,是在陣列的結尾加乙個特殊的標記來檢測陣列的結束,比如c風格的字串就是在結尾加乙個null。

第二種方法與迭代器的思路類似,傳遞給函式陣列的起始和結束位置。

void printvaules(const

int *beg,const

int *end)

; printvaules(value,value+3);

return

0;

}

第三種做法是傳遞給函式陣列的同時,順便傳遞給函式陣列的大小

void printvaules(const

int a,const size_t size)

; printvaules(value,3);

return

0;

}

截圖展示區:

此時函式呼叫會產生二義性!!!

函式中實參到形參的傳遞

引數的傳遞就是用實參初始化對應的形參。非引用形參 基本的情況 複製實參的值。函式並沒有訪問呼叫函式所傳遞的實參本身,所以不會改變實參的值。void swap int x,int y int main 指標形參 此時將複製實參的指標 形參的改變不會引起實參的改變,但是形參指向的內容可以發生變化。voi...

實參與形參的傳遞關係

當我們在主調函式中呼叫方法的時候,需要把型別匹配的實際的資料傳入到方法中。傳進去的那個資料就是實參,而在方法定義中接收引數的那個變數就是形參。下面分三種情況討論 1 傳遞基本資料型別 這種情況下,實參是把值傳遞給形參,形參在函式中改變值不會影響實參。2 傳遞實體物件 這種情況中,實參實際是把物件在堆...

函式實參和形參之間的傳遞

實參可以是常量,變數或表示式。實參與形參的型別應相同或賦值相容。在呼叫函式過程中發生的實參與形參間的資料傳遞,常稱為 虛實結合 1.在定義函式中制定的形參,在沒有出現函式呼叫時,它們不佔記憶體中的儲存單元。在發生函式呼叫時,函式的形參被臨時分配記憶體單元。2.將實參的值傳遞給形參。3.在執行函式時,...