我最近开始学习C ++,而且我对指针有些困惑。你可以解释一下为什么在下面的例子中变量“a”等于1而z = 0 ??????我真的很困惑!!!!!!
#include<iostream>
using namespace std;
void main()
{
int a;
int Z[3] ={1, 2, 3};
int *z;
z=Z;
a = (*z)--;
cout<<a<<" "<<*z<<"\n";
system ("pause");
}
逻辑上,我相信,首先* z指向数组的第0个元素 - 即1 然后 - 运算符将第0个元素的值减1,现在z [0]应该为0 但为什么它仍然为“a”变量返回1 ????
答案 0 :(得分:3)
您的运营顺序如下:
a = *z //*z = 1 here
*z = *z - 1 //*z = 0 here
赋值操作符在赋值后发生。
答案 1 :(得分:1)
这是因为递减运算符在表达式之后。
a = (*z)--;
这里首先评估* z,并为a赋值(1)。之后* z减少到零。
如果是
a = --(*z);
然后* z将评估并递减第1。之后,该值将被分配给a。因此,在这种情况下,两者都将为零。
答案 2 :(得分:1)
递减后,thing--
,在递减之前产生值;因此,为a
分配了先前的*z
值,即1。
预递减--thing
在递减后产生值,因此更改为a = --(*z);
会将a
设置为零。