【问题标题】:What happened in the function convert(&m)? [duplicate]函数 convert(&m) 发生了什么? [复制]
【发布时间】:2021-06-06 06:16:01
【问题描述】:

代码如下:

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(&amp;m)后面的答案是m=57而不是m=58

【问题讨论】:

  • 通过不在函数内部做真正奇怪的事情来解决这个问题。 要么返回新值要么调整参数。不要同时做这两件事。

标签: c++ post-increment


【解决方案1】:

第二次调用将 m 递增到 58,但由于使用了后递增 ++ 运算符,它返回原始值 (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(&amp;m); 打印:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多