C语言数组越界问题

输入10个整型数存入一维数组,输出值和下标都为奇数的元素及其个数。我的代码如下,执行时有错#include <stdio.h>
int main(void)
{
int a[9];
int i,count=0;
for(i=0;i<10;i++)
{
scanf("%d ",&a[i]);
if(i%2==1&&a[i]%2==1)
count++;
}
printf("count=%d\n",count);
for(i=0;i<10;i++)
if(i%2==1&&a[i]%2==1)
printf("a[%d]=%d\n",i,a[i]);
}要是改成a[10]就可以,但是明明没有越界啊,是什么原因

第1个回答  2013-07-06
对于数组而言,大部分语言中,数组的下标都是从0开始的,因此:
定义 int a[9]; 则,其最大下标为8(0,1,2, 3,4,5, 6,7,8)
所以,上面代码肯定会越界,因为 最大时,下标为9了
第2个回答  推荐于2018-04-13
怎么没有越界,你定义int a[9]这样数组a只包含9个元素,而你循环却是10次,这样最后一次是越界的。注意定义的时候,指定的是数组大小,而不是数组的下标上限。本回答被网友采纳
第3个回答  2019-10-21
#include
<stdio.h>#include<conio.h>
void
main
(void){
int
a[10]; int
i,count=0; for(i=0;i<=10;i++) {
scanf("%d",&a[i]); } for(i=0;i<=10;i++)
if(((i%2)==1)&&((a[i]%2)==1))
{printf("a[%d]=%d\n",i,a[i]);

count++;
} printf("count=%d\n",count);
}正确程序如上,还有不要再scanf的%d后加空格,这样的话对你的读入方式会产生影响,希望对你有用·····
第4个回答  2013-07-06
#include <stdio.h>
#include<conio.h>

void main (void)
{

int a[10];
int i,count=0;
for(i=0;i<=10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<=10;i++)
if(((i%2)==1)&&((a[i]%2)==1))
{printf("a[%d]=%d\n",i,a[i]);<br/> count++;<br/> }

printf("count=%d\n",count);

}
正确程序如上,还有不要再scanf的%d后加空格,这样的话对你的读入方式会产生影响,希望对你有用·····
第5个回答  2020-03-16
#include
<stdio.h>
#include<conio.h>
void
main
(void)
{
int
a[10];
int
i,count=0;
for(i=0;i<=10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<=10;i++)
if(((i%2)==1)&&((a[i]%2)==1))
{printf("a[%d]=%d\n",i,a[i]);<br/>
count++;<br/>
}
printf("count=%d\n",count);
}
正确程序如上,还有不要再scanf的%d后加空格,这样的话对你的读入方式会产生影响,希望对你有用·····
相似回答