请大家帮我解释一个c++程序的运行结果

来源:百度知道 编辑:UC知道 时间:2024/05/15 13:12:01
#include<iostream>
using namespace std;
void prt(int*x,int*y,int*z)
{
cout<<++*x<<","<<++*y<<","<<*z++<<endl;
}
int a=10,c=20,b=40;
void main()
{
prt(&a,&b,&c);
prt(&a,&b,&c);
}
我认为输出结果为:
11,41,20
12,42,21,
可是输出结果为:
11,41,20
12,42,20
请大家给我解释一下z后面的++到底给了谁啊?
你说的我明白。可是在参数传递的过程中不是相当于:
int* x=&a;int* y=&b;int* z=&c;
这样的话,*z不就是c吗?
谢谢您的关注,十分感谢!

我想你的问题应该是,最后一个数,
你认为是21
而结果是20.
当你调用void prt()时,b把他的值赋给*Z
在函数中执行*Z++之后,*Z的值加一,
但这个变化并没有反馈给b,所以b的值没有改变

建议你看一下 传值引用与传地址引用的区别

*的优先级比++高
所以*z++等价于(*z)++
而(*z)++的值等于*z的值,在用完(*z)++这个表达式后,才执行++操作

int *z=&c是 z=&c不是*z=&c
这里分两种情况:
1.定义的时候赋值就是这样。
2.函数的形参传递也是这样,形参int *z定义z为整数指针,传入数值时,是传给z的而不是给*z的。

理论上你的答案是对的!

当你调用void prt()时,b把他的值赋给*Z
在函数中执行*Z++之后,*Z的值加一,
但这个变化并没有反馈给b,所以b的值没有改变
你可以断点调试下 很容易就看出来了