这里我编写了一些代码来从函数中获取数字的平方,但是返回语句不能正常工作,它给出的是我输入的相同数字,我想知道原因在此背后,如果任何人可以向我解释这个......
#include<iostream>
#include<conio.h>
using namespace std;
int square(int &i);
int main()
{
cout<<"enter the number whose square you want to find";
int a;
cin>>a;
square(a);
cout<<"the square of the number is"<<a;
_getch();
return 0;
}
int square(int &i)
{
return i*i;
}
答案 0 :(得分:6)
您忽略了返回的值。您应该将其存储为:
int value = square(a);
cout<<"the square of the number is "<< value;
此外,由于类型只是整数类型,因此通过引用传递并不会给您带来太多好处。为了便于阅读,我建议使用按值传递:
int square(int i)
{
return i*i;
}
-
或者,如果您正在尝试参考并尝试学习它,那么在这种情况下我会说您要将产品的结果存储在参数本身中,如下所示:
int square(int &i)
{
i = i * i; //this updates i here, and at the call site as well
return i;
}
或者干脆就这样做:
int square(int &i)
{
return i = i*i; //multiply, update, and return - all in one statement!
}
答案 1 :(得分:4)
您没有获得结果。
你的行应该是:
a = square(a);
从函数中获取结果。
另一种可能性是写入函数
int square(int &i)
{
i = i * i;
return i;
}
后者将改变您传递给函数的变量,该函数证明传递引用是合理的。
要清楚地表明你想要改变变量,请执行以下操作:
void square(int &i)
{
i = i * i;
}
您看到没有涉及退货,但会改变变量值。
答案 2 :(得分:2)
您可以选择:
您在square
中所做的是第二种选择。你似乎想要第一个。
如果您真正想要的是修改传入的值,那么您需要的是:
void square(int &i)
{
i = i*i;
}
答案 3 :(得分:2)
要么这样做:
a = Square (a) ; // in main()
...
int Square (int i) // Pass by value -- doesn't change a in main
{
return i * i ;
}
或这样做:
Square (a) ; // in main()
...
void Square (int& i) // Pass by reference -- changes a in main
{
i = i * i ; // No need for a return value
}
确保在编程之前了解其中的差异!
答案 4 :(得分:1)
根据您对答案的评论判断,您误解了通过引用传递的内容,或者您误解了返回。
我假设您正在考虑变量i将在您的程序中更新。然而,这种情况并非如此。如果你做了类似的事情......
i = i * i;
然后是的,你会是对的。但是,您没有为i分配任何值,只需将其自身相乘并返回结果即可。此外,如果您真的想基于引用进行此工作,则无需返回任何内容,因为变量将通过引用进行更新。