石油是导体还是绝缘体:为什么有4个1啊 ?(C语言)

来源:百度文库 编辑:高考问答 时间:2024/05/06 03:06:04
下面这段代码,是求出1,2,3,4分别有多少个
main()
{
int s,a=0,b=0,c=0,d=0,i,x[]={1,3,4,2,3,4,1,2,4,2,3,1,3,2,3};
s=sizeof(x);
for(i=0;i<=s;i++)
if(x[i]==1)
a++;
else if(x[i]==2)
b++;
else if(x[i]==3)
c++;
else if(x[i]==4)
d++;
printf("1=%d 2=%d 3=%d 4=%d s=%d\n",a,b,c,d,s);
}
为什么程序运行以后,会有4个1呢?

错了两个地方
1:s = sizeof(x)应改为s = sizeof(x)/sizeof(int);
2:i<=s改为i<s;
你这样做实际上是处理了61个数据sizeof(x)=60;
后面的数据恰好有一个1,明白了吗,你的数据只有15个,你却处理了61个,多出来的数据是内存中不确定的

有两个地方错了
应该改为
s=sizeof(x)/4;
因为一个int占4个字节
所以应该除以4才得到数组的元素个数

应该是i<s不是i<=s,不然就越界了
for(i=0;i<s;i++)

for(i=0;i<=s;i++)
其中s是元素个数,那么就不能用i<=s,该是i<s

循环次数多了一次

C数组越界不报错,切记.

呵呵,大家有QQ吗
教教我