Bio*_*441 1 c pointers operators
我试图在C中增加一个值并返回旧值,我正在使用指针.问题是即使我使用指针,新值仍为0.
#include <stdio.h>
#include <stdlib.h>
int increment (int *mem) {
int tmp;
tmp = *mem;
*mem++;
return tmp;
}
int main () {
int a = 0;
printf("The old value of a is \t %d", increment(&a));
printf("The new value of a is \t %d", a);
}
Run Code Online (Sandbox Code Playgroud)
现在当我运行这个方法时,我得到的值是0; 我期待在第二个printf中有1个.我不知道我在这里做错了什么.
改变这个
*mem++;
Run Code Online (Sandbox Code Playgroud)
对此
(*mem)++;
Run Code Online (Sandbox Code Playgroud)
问题在于运营商的优先权.您可能想要阅读有关C运算符优先级的信息.
那么,你的代码做了什么?它会增加指针的值,因为++操作符首先*被激活然后被激活,没有实际效果.
因此,您的代码调用未定义的行为,因为您访问(并最终写入)无效的内存位置,因为指针在写入值之前递增.
也许你错过了一些括号?
#include <stdio.h>
#include <stdlib.h>
int increment (int *mem) {
int tmp;
tmp = *mem;
(*mem)++; // problem was here.
return tmp;
}
int main (){
int a = 0;
printf("The old value of a is \t %d", increment(&a));
printf("The new value of a is \t %d", a);
}
Run Code Online (Sandbox Code Playgroud)