2015-09-30 69 views
0

所以我的代码运行方式不同,当我有: * ptr ++; 和 ++ * ptr++指针的C位置

我知道关于++在前面添加的部分,以及在后面添加的部分。但是这个指针增量是在一个方法的末尾。 澄清我只是试图将指针移动到下一个字符。这是一个字符类型指针。

+2

什么问题?你写不同的代码和你的程序工作不同?这不是一个问题... – John3136

+0

我只是想知道这个指针发生了什么不同 – isignisign

+1

看看[C中的运算符优先级](http://en.cppreference.com/w/c/language/operator_precedence)。这将有所帮助。 –

回答

3

*ptr++被处理为*(ptr++)值;它递增ptr但返回原始值,然后解除引用。

++*ptr被处理为++(*ptr)其取消引用指针,然后递增值它指向指针)。

要预先增加指针,然后在增加的位置获取值,您需要*++ptr,这会增加指针,然后在新位置解除引用。

+0

我个人反对使用这种命名法:'* ptr ++'。把这两个操作放在不同的行上,这样的顺序对任何人来说都是明确的。编译器将足够聪明,可以做正确的事情并对其进行优化。 –

+0

对于C++迭代器,这实际上是更好的方法(因为复杂类型的后缀增量涉及复制构造函数,前缀增量避免)。我通常赞成避免指针算法(我发现编译器变得足够聪明,以至于索引有时会变得更快,因为它使得编译器的语义信息能够与算术指针所没有的指针一起工作),但知道它的工作原理是因为偶尔会碰到它(如果没有其他的话,在'strcpy'的规范描述中)。 – ShadowRanger

-2

*ptr++可以被认为是*(ptr++)它递增然后地址空间访问存储在地址空间

+0

所以这就是它的做法? * ptr包含1 (* ptr)++ => 2? – isignisign

+3

这是不正确的。 –

+1

'x = * ptr ++;'相当于'x = * ptr; ptr ++;'而'(* ptr)++'相当于'x = * ptr; X ++; * ptr = x;' – user3386109