C++ 结果为什么是 4332

来源:百度知道 编辑:UC知道 时间:2024/07/06 00:51:53
#include <stdio.h>

main()

{int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf("%d",c[i]);
}

c[5]定义了数组后,c[0],c[1],c[2],c[3],c[4]每个变量初始值在这里都是0.
for(i=0;i<12;i++) c[s[i]]++;的运行效果是,循环12次,每次使用s[i]的值作为c数组的下标,将该下标的值加1。在s[12]的数组中,共有4个1,3个2,3个3,2个4。所以使用s[i]的值作为下标,也就是使用4次1作为下标,3次2作为下标,3次3作为下标,2次4作为下标。所以对应c[1]加了4次1,c[2]加了3次1,c[3]加了3次1,c[4]加了2次1。
所以在后面for(i=1;i<5;i++) printf("%d",c[i]);
执行时,分别打印c[1],c[2],c[3],c[4],c[5]的值,其中c[1],c[2],c[3],c[4]的值依次就是4,3,3,2。而实际c数组中没有c[5],下标已经越界了,所以没有打印。
所以最终显示的结果就是4332

c[5]={0,0,0,0,0}

i=0,c[s[0]]=c[1]
i=1,c[s[1]]=c[2]
i=2,c[s[2]]=c[3]
i=3,c[s[3]]=c[4]
i=4,c[s[4]]=c[4]
i=5,c[s[5]]=c[3]
i=6,c[s[6]]=c[2]
i=7,c[s[7]]=c[1]
i=8,c[s[8]]=c[1]
i=9,c[s[9]]=c[1]
i=10,c[s[10]]=c[2]
i=11,c[s[11]]=c[3]

c[1]出现4次
c[2]出现3次
c[3]出现3次
c[4]出现2次

比如i=0时,c[s[i]]++=c[1]++=0+1=1
到了i=7时,c[s[i]]++=c[1]++=1+1=2
到了i=8时,c[s[i]]++=c[1]++=2+1=3
到了i=9时,c[s[i]]++=c[1]++=3+1=4

同样的道理,其它元素也是如此

for (i=1;i<5;i