关于函数的返回类型

时间:2011-07-26 18:30:25

标签: c++ return-value

这里我编写了一些代码来从函数中获取数字的平方,但是返回语句不能正常工作,它给出的是我输入的相同数字,我想知道原因在此背后,如果任何人可以向我解释这个......

#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;
}

5 个答案:

答案 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)

您可以选择:

  1. 修改您传入的参数,或
  2. 返回一个值并将其分配给调用范围中的某个内容。
  3. 您在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分配任何值,只需将其自身相乘并返回结果即可。此外,如果您真的想基于引用进行此工作,则无需返回任何内容,因为变量将通过引用进行更新。