返回字符串/按引用传递 我正在为一个硬件连接的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中推一个指针,我的意思是,旧的方法是返回一个字符串,不传递任何内容,而新的方法是只传递指针。我看到了,是的,它更有效,因为当返回一个字符串时,它会被复制,而指针直接写在它的预期内存上