Arduino中如何为String类型函数参数赋值并修改原变量?
Arduino中String类型函数参数赋值的正确方式
你的问题核心是函数参数的传递方式:当前代码里TEST函数采用值传递,函数内部修改的是原变量的副本,不会影响外部的str变量。
问题原因分析
你写的TEST(String str)是值传递逻辑,当调用TEST(str)时,程序会创建一个str的副本传入函数。函数内的str = "TEST"只是修改了这个临时副本,外部的原str变量完全不受影响,所以串口输出里str始终为空。
两种可行解决方案
1. 使用引用传递(推荐)
在参数类型后加&,让函数直接操作原变量本身,代码更简洁直观:
void setup() { Serial.begin(9600); } void loop() { String str; bool res = TEST(str); Serial.println("res: " + String(res)); Serial.println("str: " + str); delay(1000); } bool TEST(String &str) // 加&表示引用传递 { str = "TEST"; return true; }
2. 使用指针传递
如果习惯用指针逻辑,也可以通过传递变量地址来修改原变量:
void setup() { Serial.begin(9600); } void loop() { String str; bool res = TEST(&str); // 传递str的内存地址 Serial.println("res: " + String(res)); Serial.println("str: " + str); delay(1000); } bool TEST(String *str) // 参数为String类型指针 { *str = "TEST"; // 通过指针访问并修改原变量 return true; }
验证结果
修改后串口输出会符合你的期望:
res: 1 str: TEST
内容的提问来源于stack exchange,提问作者Runsva
相关产品推荐
相关产品推荐

