Я пишу код на C++ для платы Arduino, в которой есть определенное оборудование. В разных местах кода мне нужно построить строку со значениями различных подключенных аппаратных средств и отправить ее по последовательному как часть команды. Поскольку это должно быть частью очень специфической команды, отправленной по последовательному, я сначала ее создаю и отправляю, когда вся команда готова.Вернуть строку/пройти по ссылке
На данный момент я делаю это с помощью функции ниже
'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();
Я задавался вопросом, было ли это возможно сделать это, объявив строку в основной а затем передать его функции по ссылке и позволить функции изменять ее напрямую. Я пробовал это несколько способов, но у меня возникают проблемы с его работой. Я попробовал что-то вроде ниже, но не так привык к этому, поэтому я надеялся, что кто-то сможет помочь.
Прототип
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);
}
Привет Cantfindname, большое спасибо, что зафиксировал его. В последнее время я писал много кода не C++, поэтому полностью забыл эту часть. Я также вообще избегаю ссылок в случае нулевых параметров. Мне было интересно, знаете ли вы, эффективнее ли это сделать второй способ, чтобы я не передавал строки в стек? – user1649972
Спасибо, Raw, просто опечатка здесь: D – user1649972
Насколько я знаю, ссылки в основном являются синтаксическим сахаром в C++, поэтому после компиляции оба способа будут абсолютно одинаковыми, и вы будете только нажимать указатель в стеке – Cantfindname