为什么在这个例子中
*p++ = c;
是* p首先等于c然后p增加1。我查看了this运算符优先级表,它表示" ="运算符在15位,++(后缀)是第一位的。这对我来说没有意义。我试过这个例子:
char in_line[LINELNG];
char *cp;
int c;
cp = &in_line[0];
while((c = getc(stdin)) != EOF){
if(cp == &in_line[LINELNG-1] || c == '\n'){
/*
* Insert end-of-line marker
*/
*cp = 0;
if(strcmp(in_line, "stop") == 0 )
exit(EXIT_SUCCESS);
else
printf("line was %d characters long\n",
(int)(cp-in_line));
cp = in_line;
}
else
*++cp = c;
}
答案 0 :(得分:4)
伪代码扩展:
*p++ = c;
相当于
*p = c;
p = p + 1;
,而
*++p = c;
相当于
p = p + 1;
*p = c;
++
确实比C中的大多数其他运算符绑定得更紧,但其前/后修复位置确切地确定了p
中的值以及何时使用它的情况。
答案 1 :(得分:1)
++
和--
的前后形式同时包含结果和副作用。对于++x
,表达式的结果为x+1
,副作用是x
增加1。 x++
,表达式的结果是x
的当前值,副作用是x
增加的*p++ = c
1.
表达式
(*(p++)) = (c)
解析为
t = p
*t = c
p = p + 1
和评估,好像写成 1
*t = c
注意p = p + 1
和p
可以按任何顺序相互发生,*++p = c
只评估一次。
同样,
(*(++p)) = c
被解析为
t = p + 1
*t = c
p = p + 1
并进行评估,就好像写成
一样userMarker = new MarkerOptions().position(latLng).title("Current Location");
mMap.addMarker(userMarker);
与上述相同的警告。