Arduino中如何通过循环动态调用char数组变量?
解决动态调用char数组的问题
你原来的思路走不通,因为C语言(包括Arduino环境)不支持通过字符串拼接出来的变量名直接访问对应变量——编译后变量名会被替换成内存地址,运行时没法通过字符串去查找对应变量的地址。
正确的做法是用指针数组来管理这些char数组,把每个数组的地址存进去,之后直接通过循环索引就能访问:
步骤1:定义指针数组
把你的Jan1、Jan2、Jan3数组的地址存入一个char类型的指针数组:
char Jan1[] = "1,2,3,4"; char Jan2[] = "5,7,3,4"; char Jan3[] = "10,9,3,4"; // 定义指针数组,存储每个char数组的地址 char* months[] = {Jan1, Jan2, Jan3};
步骤2:循环访问指针数组
直接通过循环的索引值来访问指针数组里的元素,就能拿到对应char数组的内容:
// 数组长度可以用sizeof计算,避免硬编码 int monthCount = sizeof(months) / sizeof(months[0]); for(int i=0; i<monthCount; i++){ // 直接打印指针指向的字符串,也可以做其他处理 Serial.print(months[i]); Serial.println(); // 换行区分不同内容 }
为什么原来的代码不行?
你用sprintf生成的"Jan%d"只是一个字符串,比如"Jan1",但这个字符串和你定义的Jan1变量没有任何关联——它只是一串字符,不是变量的引用,所以没法通过它访问到对应的char数组。
额外注意事项
- 如果需要从1开始计数(比如i从1到3),可以把循环改成
for(int i=1; i<=monthCount; i++),访问时用months[i-1]即可 - 指针数组的类型要和你的char数组匹配,这里用
char*是因为char数组名可以隐式转换成指向首元素的指针
内容的提问来源于stack exchange,提问作者Farhan
相关产品推荐
相关产品推荐

