我无法理解一件奇怪的事情。这是我的计划:
#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”返回一个值(至少这是我老师教给我的))。但是如果你执行它,值将在主函数中交换!怎么会 ?谁能告诉我它是如何可能的?
答案 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)
实际上,该函数没有返回值。通过变量访问值只是地址和交换他们的参考。你的代码是正确的,现在我已经清除了你的概念而没有任何冗长的解释。这就是全部。