函数 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
代码如下:
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