【发布时间】:2016-07-22 19:00:16
【问题描述】:
为什么在这个例子中
*p++ = c;
是 *p 首先等于 c 然后 p 增加一。我查看了this 运算符优先级表,它说“=”运算符在 15.place 中,++(后缀)是第一个。这对我来说没有意义。我试过这个的例子:
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;
}
【问题讨论】:
-
您是否想过一次只做一件事 - 让代码更易于阅读和理解。
-
它们是不同的操作数。您对优先级的看法是正确的,但是赋值发生在
p指向的值上,而增量在指针上。 -
因为它是
p++。增加 P AFTER 读取它的值。++p将是“增加 p,然后读取它的值” -
@EdHeal 我会这样做,但我在一本书中看到了这个例子,所以我想知道为什么它会这样工作。
-
奇怪的是,您询问
*p++ = c,但您的代码却包含*++cp = c。你确实意识到这些是不同的,对吧?
标签: c pointers variable-assignment assignment-operator operator-precedence