函式呼叫時,實參傳遞到形參時的轉換問題?
要點:
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.在執行函式時,...