增加指针的内容

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个.我不知道我在这里做错了什么.

gsa*_*ras 9

改变这个

*mem++;
Run Code Online (Sandbox Code Playgroud)

对此

(*mem)++;
Run Code Online (Sandbox Code Playgroud)

问题在于运营商的优先权.您可能想要阅读有关C运算符优先级的信息.


那么,你的代码做了什么?它会增加指针的值,因为++操作符首先*被激活然后被激活,没有实际效果.

因此,您的代码调用未定义的行为,因为您访问(并最终写入)无效的内存位置,因为指针在写入值之前递增.


ric*_*ere 5

也许你错过了一些括号?

#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)