歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++裡面的引用和指針

C++裡面的引用和指針

日期:2017/3/1 10:30:38   编辑:Linux編程

形參和實參結合規則:形參為引用時,形參(引用)接收實參(對象)的地址。

或表述為:形參為引用時,凡遇到形參(引用)的地方,全部用實參(對象)來代替。 

傳遞引用給函數與傳遞指針的效果相同。但是可讀性比指針傳遞好(傳值方式的調用與可讀性,性能卻強於傳值方式),參數結合符合初始化標准,可使用引用傳遞從函數返回多個值(指針和引用都可以)。

代碼例子:

[cpp]
  1. #include <iostream>
  2. using namespace std;
  3. void swap(int &a1, int &b1);
  4. void swap1(int a1, int b1);
  5. void swap2(int *a1, int *b1);
  6. int main()
  7. {
  8. int a, b;
  9. a = 1, b = 2;
  10. cout << "initial:\n" << "a=" << a <<" b=" << b << endl;
  11. swap(a, b);// 傳遞的是實際值
  12. cout << "swap(a, b):\n" << "a=" << a <<" b=" << b << endl;
  13. a = 1, b = 2;
  14. swap1(a, b);
  15. cout << "swap1(a, b):\n" << "a=" << a <<" b=" << b << endl;
  16. a = 1, b = 2;
  17. swap2(&a, &b);// 傳遞的是地址值
  18. cout << "swap2(&a, &b):\n" << "a=" << a <<" b=" << b << endl;
  19. }
  20. void swap(int &a1, int &b1)
  21. {
  22. int c;
  23. c = a1;
  24. a1 = b1;
  25. b1 = c;
  26. }
  27. void swap1(int a1, int b1)
  28. {
  29. int c;
  30. c = a1;
  31. a1 = b1;
  32. b1 = c;
  33. }
  34. void swap2(int *a1, int *b1)
  35. {
  36. int c;
  37. c = *a1;
  38. *a1 = *b1;
  39. *b1 = c;
  40. }
[html]
  1. [[email protected] test]# g++ main.cpp -o main
  2. [[email protected] test]# ./main
  3. initial:
  4. a=1 b=2
  5. swap(a, b):
  6. a=2 b=1
  7. swap1(a, b):
  8. a=1 b=2
  9. swap2(&a, &b):
  10. a=2 b=1
  11. [[email protected] test]#

引用和指針的關系:

指針是個變量,可再賦值; 而引用建立時必須進行初始化並且決不會再關聯其它不同的變量。

指針操縱兩個實體(指針值、指向的值);引用只能操縱一個實體。

引用在內部用指針實現 ,被看成是指針常量,不能操作自身的地址值,只能訪問所指向的實體。

在語言層面,引用的用法和對象一樣;在二進制層面,引用一般都是通過指針來實現的,只不過編譯器幫我們完成了轉換.

實際上“引用”可以做的任何事情“指針”也都能夠做,為什麼還要“引用”?

答案是“用適當的工具做恰如其分的工作”。

指針能夠毫無約束地操作內存中的東西,盡管指針功能強大,但是非常危險。

引用是指針出於安全考慮的替代品。

在以下情況下你應該使用指針:

一是你考慮到存在不指向任何對象的可能(在這種情況下,你能夠設置指針為空)

二是你需要能夠在不同的時刻指向不同的對象(在這種情況下,你能改變指針的指向)。

如果總是指向一個對象並且一旦指向一個對象後就不會改變指向,那麼你應該使用引用。

Copyright © Linux教程網 All Rights Reserved