返回字符串/按引用传递 我正在为一个硬件连接的ARDUNO板写一些C++代码。在代码中的各个地方,我需要构造一个包含各种连接硬件的值的字符串,并将其作为命令的一部分通过串行发送。由于它需要是通过串行总线发送的非常特定的命令的一部分,所以我首先构造它,并在整个命令准备就绪时发送它

返回字符串/按引用传递 我正在为一个硬件连接的ARDUNO板写一些C++代码。在代码中的各个地方,我需要构造一个包含各种连接硬件的值的字符串,并将其作为命令的一部分通过串行发送。由于它需要是通过串行总线发送的非常特定的命令的一部分,所以我首先构造它,并在整个命令准备就绪时发送它,c++,string,arduino,pass-by-reference,C++,String,Arduino,Pass By Reference,目前,我正在通过下面的函数进行操作 'String constructDataString () { // Set up data to transmit String dataStr = String(var1); dataStr += ","; dataStr += String(var2); dataStr += ","; dataStr += String(var3);

目前,我正在通过下面的函数进行操作

'String constructDataString ()
 {
    // Set up data to transmit
    String dataStr = String(var1);                          
    dataStr += ",";
    dataStr += String(var2);
    dataStr += ",";
    dataStr += String(var3);        
    dataStr += ",";
    dataStr += String(var4);    
    dataStr += ",";
    dataStr += String(var5);                            

    return dataStr;
 }'
然后,我把它叫做

String dataString = constructDataString ();
我想知道是否可以通过在main中声明一个字符串,然后通过引用将其传递给函数并允许函数直接修改它来实现这一点。我尝试过几种方法,但是我在让它工作时遇到了困难。我尝试了下面这样的方法,但不太熟悉,所以我希望有人能帮助我

原型

void constructDataString (String* extString)
主叫

String dataString =””;
String* dataStringPtr = & dataString;
constructDataString (dataStringPtr);
作用

void constructDataString (String* extString)
{
 // Set up data to transmit
    extString = String(var1);                           
    extString += ",";
    extString += String(var2);                                  
    extString += ",";
    extString += String(var3);      
    extString += ",";
    extString += String(var4);  
    extString += ",";
    extString += String(var5);
}

当然可以。但是,在
constructDataString
的主体中,需要使用
*extString
而不是
extString
来取消对指针的引用。 否则,您可以在C++中使用引用。 参考后,代码将为:

void constructDataString (String& extString)
{
 // Set up data to transmit
    extString = String(var1);                           
    extString += ",";
    extString += String(var2);                                  
    extString += ",";
    extString += String(var3);      
    extString += ",";
    extString += String(var4);  
    extString += ",";
    extString += String(var5);
}
您使用它的方式如下:

String dataString =””;
constructDataString (dataString);

当然可以。但是,在
constructDataString
的主体中,需要使用
*extString
而不是
extString
来取消对指针的引用。 否则,您可以在C++中使用引用。 参考后,代码将为:

void constructDataString (String& extString)
{
 // Set up data to transmit
    extString = String(var1);                           
    extString += ",";
    extString += String(var2);                                  
    extString += ",";
    extString += String(var3);      
    extString += ",";
    extString += String(var4);  
    extString += ",";
    extString += String(var5);
}
您使用它的方式如下:

String dataString =””;
constructDataString (dataString);

嗨Cantfindname,非常感谢,已经修好了。我最近一直写很多非C++代码,所以我完全忘记了这一部分。我通常也避免在参数为空的情况下引用。我想知道,如果你知道第二种方法是不是更有效,这样我就不会在栈上传递字符串了?谢谢,RAW,这里只是一个打印错误:据我所知,引用大多是C++中的语法糖,所以编译后,两种方法都将完全相同。你只会在stackSorry Cantfindname中推一个指针,我实际上指的是旧方法,返回一个字符串,不传递任何内容,和新方法,只传递指针。我看到了,是的,它更有效,因为当返回一个字符串时,它会被复制,使用指针时,您可以直接在其指定的内存HI Cantfindname上写入,非常感谢,这已经修复了它。我最近一直写很多非C++代码,所以我完全忘记了这一部分。我通常也避免在参数为空的情况下引用。我想知道,如果你知道第二种方法是不是更有效,这样我就不会在栈上传递字符串了?谢谢,RAW,这里只是一个打印错误:据我所知,引用大多是C++中的语法糖,所以编译后,两种方法都将完全相同。你只会在stackSorry Cantfindname中推一个指针,我的意思是,旧的方法是返回一个字符串,不传递任何内容,而新的方法是只传递指针。我看到了,是的,它更有效,因为当返回一个字符串时,它会被复制,而指针直接写在它的预期内存上