所以,我发现了一些困扰我一段时间的事情。我还是C语言的新手。
我正在谈论的代码就在这里,它是strcmp的一个实现:http://pastebin.com/VeHGm8sD
这个程序的奇怪之处在于,如果你分别在第12行改变13
*first_string++; // should increment value of char ??
*second_string++;
到
first_string++; // should increment address
second_string++;
然而他们都增加了地址。怎么可能?
答案 0 :(得分:2)
因为运算符优先。
该表单将增加char:
(*first_string)++;
或
++*first_string;
@JonathanLeffler指出。在这种特殊情况下,当first_string
指向的char增加时,通过终止语句过早地删除结果并不重要。在所有其他情况下,当此表达式是其他表达式的子表达式时,您应该清楚地了解您使用的++
形式。
在您的示例中,*first_string++
具有char的值和类型,而first_string++
是指针
答案 1 :(得分:1)
这里的魔力是operator precedence。
*var++
相当于*(var++)
。