2013-07-23 85 views
1

我的CS课程正在从Java转换到C中一小段时间。我现在正在忙于指针,我发现++运算符用于增加doens't工作时解引用。这不仅仅是一个好奇心问题。只是还没有习惯指针概念。我只是在做一些错误的事情,或者与指针有关吗?++指针上的运算符

例如:

*pointer++; Will not increment the value. 
*pointer+=1; Will increment the value. 

提前感谢!

回答

3
*pointer++; 

相当于

*(pointer++); // pointer is incremented 

,而不是

(*pointer)++; // pointee is incremented 
+0

谢谢,这样做很有意义。 – nickcorin

2

*pointer++;几乎等同于:

*pointer; 
pointer = pointer + 1; 

为什么它如此?

在表达*pointer++;++是后缀操作符,则这样的拳头*顺从操作中执行的pointer++增量值(而不是增加值)。

*pointer += 1只是相当于:

*pointer = *pointer + 1; 

是递增pointer指出值。

4

当你想增加值,你必须确保你使用括号。

(*pointer)++; 
2

*pointer++递增pointer变量,而不是由值指向它。

int array[4] = {1,2,3,4}; 

int *pointer = array; 

// *pointer equals 1 

*pointer++; 

// *pointer now equals 2 
+1

这很好地解释了这个想法,谢谢! – nickcorin

+0

接受答案,如果你喜欢它。 – Jiminion

+0

感谢您的编辑。代码是双倍行距? – Jiminion

2

这与运营商的优先级要做到:后递增++比提领更高的优先级运营商*,而+=具有较低的优先级in the table of operator precedences。这就是为什么在第一个示例中,++应用于之后解除引用的指针,而第二个示例中+= 1应用于解除引用的结果。

+1

我注意到很晚,但你在概念上很好地解释! ...我真的很喜欢你的答案。 –