update
[linguofeng.github.com.git] / _posts / 2012-09-28-cpp-value-reference-pointer.textile
blobac307b2c6144b28d7e6b1e804f7a53b77d65be0b
1 ---
2 layout: post
3 title: C++的值、引用和指针的传递
4 description: C++中值传递、引用传递、指针传递的区别
5 categories: [archive]
6 tags: [c++]
7 ---
9 <section>
10 <pre class="prettyprint">
11 #include <iostream>
13 void passValue(int x)            // 值传递
15     x++;
16     std::cout << "passValue() -- x = " << x << std::endl;
19 void passReference(int &x)      // 引用传递,只是在定义函数的时候,参数需要加&说明是接收参数的引用,而调用的时候和值传递一样,只填参数
21     x++;
22     std::cout << "passReference() -- x = " << x << std::endl;
25 void passPointer(int *x)        // 指针传递,定义函数的时候,需要说明接收的是参数的指针,调用的时候使用取地址符&
27     (*x)++;  // 先取得地址对应的值再执行++操作
28     std::cout << "passPointer() -- x = " << *x << std::endl;
32 int main()
34     int x(10);
35     std::cout << "x = " << x << std::endl;
36     passValue(x);
37     std::cout << "x = " << x << std::endl;
38     passReference(x);
39     std::cout << "x = " << x << std::endl;
40     passPointer(&x);
41     std::cout << "x = " << x << std::endl;
42     return 0;
44 </pre>
46 <p>结果:</p>
47 <pre class="prettyprint">
48 x = 10                        // 初始值为10
49 passValue() -- x = 11         // 在passValue()函数中++后输出11
50 x = 10                        // 经过值传递后原值没有发生改变,说明值传递不会改变参数本身的属性
51 passReference() -- x = 11     // 在passReference()函数中++后输出11
52 x = 11                        // 经过引用传递后原值发生了变化,说明引用传递会改变参数本身的属性
53 passPointer() -- x = 12       // 在passPointer()函数中++后输出12
54 x = 12                        // 经过指针传递后原值也发生了变化,说明指针传递也会改变参数本身的属性,与引用传递不同的是调用函数需要使用&取地址符,并按指针的操作方式对参数进行操作。
55 </pre>
56 </section>