【发布时间】:2020-10-11 14:53:40
【问题描述】:
我不知道为什么这给了我垃圾:
#include <stdio.h>
int main(){
int a[10];
for(
int i =0;
i++<10;
a[i-1]=i
)
{
printf("%i:%i\n", i-1, a[i-1]);
}
}
这给了我:
0:1676584240
1:32609
2:0
3:0
4:-1577938528
5:21992
6:-1577938864
7:21992
8:2114427248
9:32766
索引看起来是正确的,甚至循环内的分配也是正确的(例如,printf("%i\n",a[0]) 在循环之后给出了正确的 1)。但是在 for 循环体内, printf 尽管有正确的索引,但给出了错误的值(一些垃圾)。这是为什么呢?
编辑,在用... && (a[i]=i) 回答了一些问题后,我尝试用其他语句来做到这一点:
for(
int i = 0;
i<10 && (a[i]=i);
(i++) && printf("%i\n", a[i])
);
但这不会打印任何内容,只会发出警告:
warning: value computed is not used [-Wunused-value]
i++ && printf("%i\n",a[i])
为什么?当我可以做出(a[i]=i)的“真实”陈述时,为什么我不能做出(i++)的“真实”陈述?
【问题讨论】:
-
“给出错误的值” - 正确的值是什么?
-
1,2,3,4,5,6,7,8,9,10
-
你知道
a[ ]没有初始化吗!所以它有一些很好的垃圾值! -
您首先打印未初始化的值,然后才为其分配一个有效值。
-
你做
a[i-1]=i之后你打印了,太晚了