1. 程式人生 > >關於C++函式呼叫(返回)傳值的思考!

關於C++函式呼叫(返回)傳值的思考!

   今天做了一道題,不能使用全域性變數,main函式不能改變,只能改變呼叫函式,也用不了指標,所以想了許久,查找了許多資料,把過去知道的引用實踐了。

   返回值只能返回一個值,但是需要的值可能需要有多了,那麼我們就需要有傳值,怎麼把值傳遞到該去的位置,有三個辦法。值傳遞,指標傳遞,引用傳遞。

1.值傳遞,就是main函式上的值沒有變化,但是是在呼叫函式上的值的變化,與主函式上無關。就是呼叫函式已經把主函式上的值 做好了。

int fun(int a,int b)
{
  int c=a;
  a=b;
  b=c;
  cout<<a<<"  "<<b;
  return 0;
}
int main()
{
  int a,b;cin>>a>>b;
  fun(a,b);
  return 0;
}
2.指標傳遞,意思就是有另一個名字(新的東西)指向了原先想要改變的那個值,呼叫函式中,如果指標變化了,想要改變的那個值也一樣會改變,同樣在主函式是一樣的,一個地址上的值改變了,指標會變,原先的定義的名字的值也會變。等於有個東西有倆個名字,常用的大名,不常有的小名,把一個名字指向的人變了,另一個名字也是被換了。
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;
}
3.我感覺今天我實踐的引用傳遞也是很重要,我開始喜歡上的這個辦法。大概意思就是呼叫函式上的值變了,同樣和指標差不多的是,main上的值也會變。
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;
}
呼叫函式的命名和主函式上的命名無關,即使是全域性變數和區域性變數一樣,也是優先區域性變數,所以每個函式的命名使用只在那一個限制的範圍內!

本文主要是自己對關於值傳遞的學習。