2016-10-27 2 views
0

Я пишу код на 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); 
} 

ответ

2

Конечно, Вы можете. Однако в теле 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); 
+0

Привет Cantfindname, большое спасибо, что зафиксировал его. В последнее время я писал много кода не C++, поэтому полностью забыл эту часть. Я также вообще избегаю ссылок в случае нулевых параметров. Мне было интересно, знаете ли вы, эффективнее ли это сделать второй способ, чтобы я не передавал строки в стек? – user1649972

+0

Спасибо, Raw, просто опечатка здесь: D – user1649972

+1

Насколько я знаю, ссылки в основном являются синтаксическим сахаром в C++, поэтому после компиляции оба способа будут абсолютно одинаковыми, и вы будете только нажимать указатель в стеке – Cantfindname

Смежные вопросы