为什么void返回一个值?

时间:2013-11-17 12:43:21

标签: c++ void

我无法理解一件奇怪的事情。这是我的计划:

#include <iostream>
using namespace std;

void Swap(int *a , int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main()
{
    int a=0;
    int b=0;

    cout<<"Please enter integer A: ";
    cin>>a;

    cout<<"Please enter integer B: ";
    cin>>b;

    cout<<endl;

    cout<<"************Before Swap************\n";
    cout<<"Value of A ="<<a<<endl;
    cout<<"Value of B ="<<b<<endl;

    Swap (&a , &b);

    cout<<endl;

    cout<<"************After Swap*************\n";
    cout<<"Value of A ="<<a<<endl;
    cout<<"Value of B ="<<b<<endl;

    return 0;
}

现在,如果你看一下“Swap”这个函数,我已经使用了“void Swap”。因此它不能向main函数返回任何值(只有“int”返回一个值(至少这是我老师教给我的))。但是如果你执行它,值将在主函数中交换!怎么会 ?谁能告诉我它是如何可能的?

7 个答案:

答案 0 :(得分:6)

示例中的交换函数只交换两个整数,但不返回任何内容。

为了检查已重新调整的函数,您必须将其分配给某个变量,例如

int a = swap(&a, &b);

但是这段代码有错误,因为交换函数不会返回任何内容。

另一个例子:

int func() {
    return 18;
}

int main() {
    int a =  func();
    cout << a;
}

很好,因为变量a是int而函数func返回一个int。

答案 1 :(得分:2)

Swap可能不会返回任何值,但它仍然可以修改它们。你将指向两个变量的指针传递给函数。如果更改指针映射到Swap函数的值,则该更改将在整个程序中保留。

答案 2 :(得分:1)

这是正确的。

您的Swap方法适用于指针,而不是实际值。

在你的主体中,你正在调用这个方法并告诉它交换变量中的值。在这一点上,他们处于上下文中。

答案 3 :(得分:1)

您的代码与此非常相似: http://www.tutorialspoint.com/cplusplus/cpp_function_call_by_pointer.htm

它的作用是使用指针地址。您可以将它们用作参数,然后使用它们来访问存储在该位置的信息,即a和b的值,然后更改它们。

答案 4 :(得分:1)

我认为你误解了老师说的话。

他/她说的可能是Swap()不会返回值,但通过传递地址来更改值仍然有效。

像这样:

int Swap();
int GetReturnValue = Swap(); // Get return value from Swap()

让我们来看看第二个:

void Swap();
int GetReturnValue = Swap();

虽然第二个可能真的有价值,但这个价值毫无意义。

有时,如果您喜欢第二个,您将收到编译器警告,GCC编译器将报告有关casting的警告

答案 5 :(得分:1)

交换程序只能修改你的变量,因为你已经通过引用传递它们了。

记住程序,与功能不同,不能返回值。

答案 6 :(得分:1)

实际上,该函数没有返回值。通过变量访问值只是地址和交换他们的参考。你的代码是正确的,现在我已经清除了你的概念而没有任何冗长的解释。这就是全部。