- 此问题在此处已有答案**:
(18个答案)
3天前关闭。
为什么当我把cout
放在函数体中时下面的函数(f)工作,而当我把cout
放在函数调用之后时它不工作
#include <iostream>
using namespace std;
void f(string str)
{
int size=str.size();
for (int i=0;i<size/2;i++)
{
char temp=str[i];
str[i]=str[size-i-1];
str[size-i-1]=temp;
}
}
int main ()
{
string a="abcd";
f(a);
cout<<a; //output: abcd
}
#include <iostream>
using namespace std;
void f(string str)
{
int size=str.size();
for (int i=0;i<size/2;i++)
{
char temp=str[i];
str[i]=str[size-i-1];
str[size-i-1]=temp;
}
cout<<str;
}
int main ()
{
string a="abcd";
f(a); //output: dcba
}
我是编程新手,所以我不知道指针之类的概念,我猜这就是问题所在。
1条答案
按热度按时间lrpiutwd1#
这是因为变量
a
没有被函数void f(string str)
修改。f
获取字符串的副本,然后使用该副本反转字符串。这意味着原始字符串a
没有改变。如果您希望
f
不进行复制,可以使用&
操作符通过引用传递字符串。void f(string& str)
将为a
和str
使用相同的字符串,因为它们将引用存储器中的相同数据。