如何更新函数中的C ++字符串?

时间:2015-04-30 02:39:50

标签: c++ string arduino arduino-uno

假设我想编写一个更新输入字符串值的C ++函数foo()。我该怎么做?代码应该看起来像我下面的内容,但我不知道如何正确传递字符串,以便由函数更新。

void foo(String x) // Not sure if I should put an & or * before x
{
    x += " Goodbye";
}

void main()
{
    String x = "Hello World";
    cout << "x = " << x << endl;
    foo(x);  // Not sure if I should pass a pointer to x,
             // a reference to x or what?

    cout << "After foo (), x = " << x << endl;
}

(仅供参考,我是为Arduino处理器写的)

2 个答案:

答案 0 :(得分:3)

通过引用传递:

void foo(String& x)
{
    x += " Goodbye";
}

&表示该参数是对函数外部String的引用,而不是副本。

答案 1 :(得分:1)

为了从函数中更新字符串,您需要将对字符串的引用作为输入传递:

void foo(String& x) 
{
    x += " Goodbye";
}

这个SO post解释了传递参考和传值的区别。

关于在函数签名中使用&*之间的混淆,您可以

  1. 如上所述使用&
  2. 您可以将foo定义为void foo(String *x)。但是,在这种情况下,当您致电foo时,您需要将其称为foo(&x);
  3. 在第一种情况下,您将输入作为引用变量传递,而在第二种情况下,您将其作为指针变量传递。它们之间的差异在post中解释。