關於C++函式呼叫(返回)傳值的思考!
阿新 • • 發佈:2019-02-08
今天做了一道題,不能使用全域性變數,main函式不能改變,只能改變呼叫函式,也用不了指標,所以想了許久,查找了許多資料,把過去知道的引用實踐了。
返回值只能返回一個值,但是需要的值可能需要有多了,那麼我們就需要有傳值,怎麼把值傳遞到該去的位置,有三個辦法。值傳遞,指標傳遞,引用傳遞。
1.值傳遞,就是main函式上的值沒有變化,但是是在呼叫函式上的值的變化,與主函式上無關。就是呼叫函式已經把主函式上的值 做好了。
int fun(int a,int b)
{
int c=a;
a=b;
b=c;
2.指標傳遞,意思就是有另一個名字(新的東西)指向了原先想要改變的那個值,呼叫函式中,如果指標變化了,想要改變的那個值也一樣會改變,同樣在主函式是一樣的,一個地址上的值改變了,指標會變,原先的定義的名字的值也會變。等於有個東西有倆個名字,常用的大名,不常有的小名,把一個名字指向的人變了,另一個名字也是被換了。cout<<a<<" "<<b; return 0; } int main() { int a,b;cin>>a>>b; fun(a,b); return 0; }
3.我感覺今天我實踐的引用傳遞也是很重要,我開始喜歡上的這個辦法。大概意思就是呼叫函式上的值變了,同樣和指標差不多的是,main上的值也會變。int fun(int *p, int *q) { int c = *p; *p = *q; *q = c; return 0; } int main() { int a=2, b=3;cin>>a>>b; int *p = &a, *q = &b; fun(&a, &b);//當指標上的*p,*q的值變了,指向那個地址的,a,b值同樣也會變,同樣,如果a,b值變,那麼指標上的值也會變。 return 0; }
int fun(int &a,int &b)
{
int c=a;
a=b;
b=c;
return 0;
}
int main()
{
int a,b;cin>>a>>b;
fun(a,b);//當呼叫函式上的值變化了,那麼主函式上的a,b值也是變化了。
return 0;
}
呼叫函式的命名和主函式上的命名無關,即使是全域性變數和區域性變數一樣,也是優先區域性變數,所以每個函式的命名使用只在那一個限制的範圍內!
本文主要是自己對關於值傳遞的學習。