奇怪的交互与C中的指针

时间:2016-09-15 19:53:36

标签: c pointers

所以,我发现了一些困扰我一段时间的事情。我还是C语言的新手。

我正在谈论的代码就在这里,它是strcmp的一个实现:http://pastebin.com/VeHGm8sD

这个程序的奇怪之处在于,如果你分别在第12行改变13

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

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

然而他们都增加了地址。怎么可能?

2 个答案:

答案 0 :(得分:2)

因为运算符优先。

该表单将增加char:

(*first_string)++;

++*first_string;

@JonathanLeffler指出。在这种特殊情况下,当first_string指向的char增加时,通过终止语句过早地删除结果并不重要。在所有其他情况下,当此表达式是其他表达式的子表达式时,您应该清楚地了解您使用的++形式。

在您的示例中,*first_string++具有char的值和类型,而first_string++是指针

答案 1 :(得分:1)

这里的魔力是operator precedence

*var++相当于*(var++)