Closed Themnao closed 9 years ago
如果是你以为的结果,那么传值和传引用的差别在哪呢?
int t = 10
void a(int 10)
{
++ i;
cout << i 显示为 11 << endl;
}
结果是11
int t = 10;
void b(int& 10)
{
++j;
cout << j 显示为11 << endl;
}
结果是11
书上说:void f(T) 的形参采用的是传值方式,也就是说,实参的值被拷贝给形参,形参和实参是两个相互独立的变量,在函数f内部对形参所做的任何改动都不会影响实参的值。 void f(T&)的形参采用的是传引用方式,此时形参是对应的实参的别名,形参绑定到初始化它的对象。如果我们改变了形参的值,也就是改变了对应实参的值。
int s = 0 void b(int& 0) { ++j; cout << j 显示为 0 << endl; } 结果是 0
除了这部分分析的让人不解,其余的分析的都对。书上也把区别说的很清楚了。
按你的分析,最后的输出也是 11,而不是 0 呀。
能说下你理解的顺序吗?
#include <iostream>
using std::cout; using std::endl;
void a(int i)
{
++i; // 0 自加为 1
cout << i << endl; // 输出 1
}
void b(int &j)
{
++j; // 这里对 j 的自加, 就是对 t 的自加, 引用就是个别名而已. t 为 11
cout << j << endl; // 输出 t 的值为 11.
}
int main()
{
int s = 0, t = 10;
a(s); // 传值, s 还是 s, 进入 a 的是 s_copy, 值为 0.
cout << s << endl; // s 还是 0, 输出 0
b(t); // 传引用, t 是 10, 进入 b.
cout << t << endl; // 输出 t, 已经成了 11.
}
// 输出:
// 1 (s_copy)
// 0 (s)
// 11 (t)
// 11 (t)
谢谢,这下理解第二行输出为0的意思了。
运行结果是: 1 0 11 11 我以为的结果是 1 0 11 0 谁能解释运行结果的意思? 不是很懂啊