函数 convert(&m) 中发生了什么?

What happened in the function convert(&m)?

代码如下:

int convert(int* a) {
    return (*a)++;
}

int main(){
    int m = 56;
    int n = convert(&m);
    cout << m << endl;
    m = convert(&m);
    cout << m << endl;
    return 0;
}

为什么 m=convert(&m) 之后的答案是 m=57 而不是 m=58

第二次调用将 m 递增到 58,但由于使用了 post-递增 ++ 运算符,它 returns 原始值 (57)。然后将该原始值分配回 m,覆盖增量值。净效果是 m 没有改变。

您可以通过添加一些打印输出来验证这一点,以查看正在运行的确切值:

int convert(int* a) {
    std::cout << "*a was " << *a << std::endl;
    int ret = (*a)++;
    std::cout << "*a is now " << *a << std::endl;
    std::cout << "return value is " << ret << std::endl;
    return ret;
}

m = convert(&m); 打印:

*a was 57
*a is now 58
return value is 57