我开始为什么输出产生002? 感谢编辑和答案,但我仍然感到困惑。 这是代码:
#include <stdio.h>
int t[3],i;
int main()
{
for(i=0;i<3;i++)
t[i]=i++;
for(i=0;i<3;i++)
printf("%d",t[i]);
}
002 任何人都可以帮助我理解为什么会这样吗?
答案 0 :(得分:1)
这是因为您在for循环中增加了i
计数器两次(一次在t[i] = i++
,一次在for循环的结束语句中{{1 }})。这样,for循环执行两次(不是三次),一次为i = 0,一次为i = 2.因此输出。
要说服自己,请尝试按照
添加打印件i++
并查看for循环执行的次数以及for(i=0;i<3;i++) {
printf("%i ", i);
t[i]=i++;
}
的值。
答案 1 :(得分:0)
下载C标准的副本(例如,谷歌N1570,它将为您提供最新的免费版本)。在该文档中,查找“序列点”并阅读它所说的内容。
简而言之:由于本文档中解释的原因,您的程序很垃圾,可以随心所欲。 (基本上,语句t [i] = i ++;调用未定义的行为。这是C标准中一般规则集的一个非常特殊的情况.C ++和Objective-C具有相同的规则)。
答案 2 :(得分:0)
您在每次迭代中递增两次。在第一次迭代i = 0
中,t[0] = 0
,那么您正在执行i++
两次。在第二次迭代中i=2
所以t[2] = 2
现在循环结束了。 t[1]
未初始化。
您得到002因为:
0
的第一个t[0]
< / li> 0
是garbage value
或null value
,其中t[1]
存储在内存中(在您的情况下为{{1} }})0
的最后2