Arduino 中的指针,不更新外部变量
Pointers in Arduino, not updating outside variable
不确定我做错了什么,因为 aValue 和 bValue 没有更新。
int aValue;
int bValue;
void setup() {
aValue = 0;
bValue = 0;
}
void loop() {
someFunc(&aValue, &bValue);
// code for printing aValue and bValue
}
void someFunc(int *a, int *b) {
*a++;
*b++;
}
问题是指针和 post-increment 不符合您的要求。
如果你写
void someFunc(int *a, int *b) {
*a = *a+1;
*b = *b+1;
}
有效
见
++ on a dereferenced pointer in C?
解释为什么 *a++
增加指针本身。
someFunc 中的变量 a 和 b 是副本,您正在递增副本。
post 增量的优先顺序高于指针取消引用,因此您正在增加指针的副本。取消引用无效。
如有疑问,请使用括号。
void someFunc(int *a, int *b)
{
(*a)++;
(*b)++;
}
尽管有些人说你应该这样做
void someFunc(int *a, int *b)
{
++(*a);
++(*b);
}
因为 post 在技术上递增 returns 一个值,而预递增只是递增。在这种情况下,大多数编译器会生成相同的代码。我从来没有看过AVR编译器。
不确定我做错了什么,因为 aValue 和 bValue 没有更新。
int aValue;
int bValue;
void setup() {
aValue = 0;
bValue = 0;
}
void loop() {
someFunc(&aValue, &bValue);
// code for printing aValue and bValue
}
void someFunc(int *a, int *b) {
*a++;
*b++;
}
问题是指针和 post-increment 不符合您的要求。
如果你写
void someFunc(int *a, int *b) {
*a = *a+1;
*b = *b+1;
}
有效
见
++ on a dereferenced pointer in C?
解释为什么 *a++
增加指针本身。
someFunc 中的变量 a 和 b 是副本,您正在递增副本。 post 增量的优先顺序高于指针取消引用,因此您正在增加指针的副本。取消引用无效。
如有疑问,请使用括号。
void someFunc(int *a, int *b)
{
(*a)++;
(*b)++;
}
尽管有些人说你应该这样做
void someFunc(int *a, int *b)
{
++(*a);
++(*b);
}
因为 post 在技术上递增 returns 一个值,而预递增只是递增。在这种情况下,大多数编译器会生成相同的代码。我从来没有看过AVR编译器。