2014-03-07 143 views
1

对于指向字符串文字的指针的算术运算。

char *p="abcd"; 

我有以下代码中的两个语句

++*p; 

和第二个

*++p; 

这两个都产生相同的结果,但有在途中的任何差这两个是否实现?还请清除哪一个具有更高的优先级“++”或“*”。谢谢

+0

这两个语句只是产生相同的值,因为你初始化了'p'的特定字符串(并且因为你的编译器没有发生分配标记为只读的内存中的字符串)。 – user2357112

+0

尝试字符串“等等”,看看他们做**不**产生相同的结果。 –

+0

@ Cheersandhth.-Alf,但为什么它产生相同的结果 – YakRangi

回答

1

Precedence table

引用具有更高优先级的优先级表运算符将首先进行评估。

在您的情况下,您使用的前缀增量为++,它与尊重运算符*具有相同的优先级。 所以当你有两个在同一个表达式时应该考虑它的关联性which is right to left

++ * p将等于++(* p)指针首先被置位,然后值递增。

char *p="abcd"; 

*p等于a++上字符会给你b

* ++ p将为相当于*(++ p)的指针被递增第一然后deference'd

++p将指向b字符串中,然后再*尊重会给你b。在位置2

改变你的输入字符串,你会得到不同的答案。你得到的同样的答案正如第一个字符的操作与第二个操作匹配