【发布时间】:2014-08-18 09:58:54
【问题描述】:
这个程序产生 0 1 1 作为我的预期输出 0 1 2 的输出。谁能解释为什么增量运算符不能作为前缀工作?
#include <stdio.h>
int main(void)
{
int i;
int *ptr = (int *) malloc(5 * sizeof(int));
for (i=0; i<5; i++)
*(ptr + i) = i;
printf("%d ", (*ptr)++);
printf("%d ", *ptr);
printf("%d ", *++ptr);
return 0;
}
【问题讨论】:
-
@BaummitAugen 是的,但是标签也说 C++,而且问题在两者中都是有效的。 我不认为这是一个有效的编辑;如果有的话,最好从标题中删除对标记(“in C”)的引用。
-
你想要
*ptr++。还有#include <stdlib.h> -
顺便说一句,使用调试器会比在 SO 上询问要快得多。
-
@BasileStarynkevitch ,尚未学习使用 gdb。谢谢。
-
@Angew 我对标记为多种语言的问题的问题是,即使在这种简单的情况下,答案也往往不同。如果这是一个 C++ 问题,最好告诉 OP 不要使用
<stdio.h>、malloc、C 风格的强制转换。这显然不适用于 c 问题。