Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;-在返回int的函数中通过引用传递参数 我创建了一个C++程序,通过引用函数来测试传递参数的功能。 #include <iostream> using namespace std; int f(int &b) { b = b + 1; cout << b << endl; return b; } int main() { int t = 10; cout << f(t) << " " << t << endl; //cout << f(&t) << " " << t << endl; system("PAUSE"); return 0; } #包括 使用名称空间std; 内部餐饮部(内部餐饮部){ b=b+1; cout_C++_Pass By Reference - Fatal编程技术网

C++;-在返回int的函数中通过引用传递参数 我创建了一个C++程序,通过引用函数来测试传递参数的功能。 #include <iostream> using namespace std; int f(int &b) { b = b + 1; cout << b << endl; return b; } int main() { int t = 10; cout << f(t) << " " << t << endl; //cout << f(&t) << " " << t << endl; system("PAUSE"); return 0; } #包括 使用名称空间std; 内部餐饮部(内部餐饮部){ b=b+1; cout

C++;-在返回int的函数中通过引用传递参数 我创建了一个C++程序,通过引用函数来测试传递参数的功能。 #include <iostream> using namespace std; int f(int &b) { b = b + 1; cout << b << endl; return b; } int main() { int t = 10; cout << f(t) << " " << t << endl; //cout << f(&t) << " " << t << endl; system("PAUSE"); return 0; } #包括 使用名称空间std; 内部餐饮部(内部餐饮部){ b=b+1; cout,c++,pass-by-reference,C++,Pass By Reference,t的值确实会增加。如果将输出语句一分为二,您会看到这一点: cout << f(t) << endl; cout << t << endl; coutt的值会增加。如果将输出语句一分为二,就会看到这一点: cout << f(t) << endl; cout << t << endl; cout您的代码具有未定义的行为,因为它未定义在语句中的哪个点发生副作用 类似于 cout << i

t的值确实会增加。如果将输出语句一分为二,您会看到这一点:

cout << f(t) << endl;
cout << t << endl;

coutt
的值会增加。如果将输出语句一分为二,就会看到这一点:

cout << f(t) << endl;
cout << t << endl;

cout您的代码具有未定义的行为,因为它未定义在语句中的哪个点发生副作用

类似于

cout << i++ << ++i;

cout您的代码具有未定义的行为,因为它未定义在语句中的哪个点发生副作用

类似于

cout << i++ << ++i;

cout我可以想象您遇到了涉及的问题。您正在修改和打印同一表达式中的
t
的值

编译器决定求值
t
和决定求值
f(t)
的顺序是未定义的。因此,可能不会像您所想的那样首先调用函数

如果将打印拆分为两条语句,则会看到
t
实际上已更改。例如:

cout << f(t) << " ";
cout << t << endl;

cout我可以想象您遇到了涉及的问题。您正在修改和打印同一表达式中的
t
的值

编译器决定求值
t
和决定求值
f(t)
的顺序是未定义的。因此,可能不会像您所想的那样首先调用函数

如果将打印拆分为两条语句,则会看到
t
实际上已更改。例如:

cout << f(t) << " ";
cout << t << endl;

cout该语言没有指定运算符参数的求值顺序,因此未指定
cout
表达式在函数调用之前还是之后取
t
的值

如果引入一个序列点,您将看到预期的结果,可能是将其拆分为两个表达式:

cout << f(t) << " ";
cout << t << endl;

cout该语言没有指定运算符参数的求值顺序,因此未指定
cout
表达式在函数调用之前还是之后取
t
的值

如果引入一个序列点,您将看到预期的结果,可能是将其拆分为两个表达式:

cout << f(t) << " ";
cout << t << endl;

cout您被输出顺序绊倒了。正如前面指出的,
t
确实会增加,但您可能会对输出顺序感到困惑

然而,我喜欢从问题中略过一点,试着找出如何让人们不仅理解眼前的问题,而且理解他们为什么首先遇到困难,这对我来说是非常清楚的

您需要学习调试器。

通过使用一个,您可以逐步查看代码,并在任何给定点查看
t
的值,还可以不费吹灰之力地看到它确实增加了(包括确切的时间和方式)。通过使用包含递归等概念的调试器对代码进行跟踪,您还可以更好地了解代码的工作原理


我建议您立即开始这项工作,因为它可以让您了解代码的实际工作方式,而无需通过输出语句猜测代码的运行方式。

您被输出顺序绊倒了。正如所指出的,
t
确实会递增,但您可能会对输出顺序感到困惑

然而,我喜欢从问题中略过一点,试着找出如何让人们不仅理解眼前的问题,而且理解他们为什么首先遇到困难,这对我来说是非常清楚的

您需要学习调试器。

通过使用一个,您可以逐步查看代码,并在任何给定点查看
t
的值,还可以不费吹灰之力地看到它确实增加了(包括确切的时间和方式)。通过使用包含递归等概念的调试器对代码进行跟踪,您还可以更好地了解代码的工作原理


我建议您立即开始这项工作,因为它会让您了解代码的实际工作方式,而不会通过输出语句猜测代码的运行方式。

是的,但为什么它不会递增?它不是通过引用传递的吗?它是否也应该在
main
函数中修改?是的,只是您没有得到y的顺序您希望所有输出都在一行上。将其拆分为两行可以保证事情按您希望的顺序发生。@西蒙:不,它会递增
t
。发生的情况是打印的值是调用函数之前的值。请参阅我更新的答案。@Simon-它是递增的。但是,编译器可以得到t调用函数之前或之后要输出的值。这就是为什么您应该单独输出它。是的,但为什么它不会递增?它不是通过引用传递的吗?它是否也应该在
main
函数中修改?是的,只是在一行上的所有输出都没有得到您期望的顺序。在tw上拆分它o保证事情按您希望的顺序发生。@Simon:不,它是递增的
t
。发生的情况是打印的值是调用函数之前的值。请参阅我的更新答案。@Simon-它是递增的。但是,编译器可以在调用函数之前或之后获取要输出的值.这就是为什么要单独输出的原因。