看不明白什么原因
main()
{
int i,j,a[13];
i=16;j=i+++i; printf("\n%d\n",j);
i=15; printf("%d\t%d\n",++i,i);
i=20;j=i--+i; printf("%d\n",j);
i=13; printf("%d\t%d\n",i++,i);
i=12; a=i--; printf("%d\t%d\n",a[11],a[12]);
}
上面这道题我在TC2.0上运行的结果是:
32
16 15
40
13 13
64 12
而在Win_tc 上运行结果是:
32
16 15
40
13 13
0 12
我不明白a[11]都没有赋值,在TC上运行为什么会得64,谁可以解释一下吗?在Win_tc 下运行为什么又是0呢?
问题点数:20、回复次数:11Top
1 楼thtfgao(忧郁王子)回复于 2005-05-17 22:04:47 得分 0
你的数组都没赋值,会有结果我都已经很惊奇了,按理说那个数应该很不规则才对
另外tc跟win tc的结合方式不同,正确的程序也会有两个不同的结果Top
2 楼majiaking3(majiaking3)回复于 2005-05-17 22:11:54 得分 0
而且还没有报错!没警告!想不通啊!狂郁闷……Top
3 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-05-17 22:20:42 得分 0
a=i--;
-----
晕,居然给数组名赋值Top
4 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-05-17 22:21:12 得分 0
明显编译通不过的。Top
5 楼majiaking3(majiaking3)回复于 2005-05-17 22:42:46 得分 0
main()
{
int i,j,a[13];
i=16;j=i+++i; printf("\n%d\n",j);
i=15; printf("%d\t%d\n",++i,i);
i=20;j=i--+i; printf("%d\n",j);
i=13; printf("%d\t%d\n",i++,i);
i=12; a[i]=i--; printf("%d\t%d\n",a[11],a[12]);
}
不好意思 复制代码时出错了
应该是现在这个样子 麻烦看看Top
6 楼fishyqd(小鱼儿-刚出来混)回复于 2005-05-17 23:23:50 得分 0
a[11]没有赋值所以这样,它输出的是编译器初始化数组的默认值.各编译器不同所以输出也不同Top
7 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-05-18 00:10:43 得分 0
数组没有初始化的原因Top
8 楼SaiRose(Learning......)回复于 2005-05-18 09:00:19 得分 0
i=15; printf("%d\t%d\n",++i,i);
i=13; printf("%d\t%d\n",i++,i);
这种语句和编译器有关,最好别这么写
i=12; a[i]=i--; printf("%d\t%d\n",a[11],a[12]);
a[11]没赋值Top
9 楼zhaoliang_chen(龙行天下)回复于 2005-05-18 09:20:54 得分 0
数组初始化的问题.随编译器的不同而不同
建议使用数组前初始化Top
10 楼whyglinux(山青水秀)回复于 2005-05-18 09:54:54 得分 20
如果在一个表达式中一个变量被改变一次或以上,但是却被使用两次或以上,则按照C/C++标准,这个表达式是没有定义的,其结果与表达式中操作数的计算顺序有关,是不固定的。你上面给出的表达式,包括 a[i]=i--,其结果都是无定义的。如果 i=12;,你无法预测 a[i]=i-- 是把 12 给 a[12] 还是 a[11] 赋值。Top
11 楼hblinlin(木木)回复于 2005-05-18 09:59:04 得分 0
不知道这种题目有什么意义~Top




