指针+运算符问题

时间:2013-11-28 17:48:57

标签: c++ pointers

我最近开始学习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 ????

3 个答案:

答案 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设置为零。