2016-09-15 91 views
-2

所以,我发现了一段时间以来一直困扰着我的东西。我对C语言还很陌生。C中指针的奇怪互动

,我讲的代码是在这里,它的strcmp的实现:http://pastebin.com/VeHGm8sD

有关此计划的奇怪的是,如果你在线路12分别为13

*first_string++; // should increment value of char ?? 
*second_string++; 

改变

first_string++; // should increment address 
second_string++; 

但是它们都增加地址。这怎么可能?

+1

请阅读[运算符优先顺序](http://en.cppreference.com/w/c/language/operator_precedence)。 postincrement操作符的优先级位于图表的最上方,高于解引用操作符的顶端。 –

+2

很难理解'* first_string ++;'意图是什么。显然他们想增加'first_string'。那么为什么那里有'*'呢? –

+0

这是一个很好的观点,@DavidSchwartz。链接的'strcmp()'实现看起来有点凶狠 - 好像一个更简洁的书写版本被笨拙地重写,试图使它更清晰。 –

回答

2

由于运算符的优先级。

这形式是增加焦炭:

(*first_string)++; 

++*first_string; 

为@JonathanLeffler指出。在这种特殊情况下,当由于终止语句而提前丢弃结果时,由first_string指出的字符得到增加并不重要。在所有其他情况下,当这个表达式是其他表达式的一个子表达式时,您应该清楚地了解您使用哪种形式的++

在您的示例*first_string++具有价值和字符的类型,而first_string++是一个指针

+0

或'++ * first_string' ... –

+0

现在看起来很明显。菜鸟的错误。我认为*有优先权。谢谢你们 – myheadhurts