Ⅰ 索引超出了数组界限是什么意思
数组下标一般是从0开始的。 如果一个数组有三个元素,应该是a[0]、a[1]、a[2],如果a.Length=3,则会超出了数组的界限,因为数组中根本不存在下标为3的元素。
示例如下:
int[] score = new int[] { 89, 39, 100, 51, 94, 65, 70 };//分数
//score数组的长度为7,从零开始循环,而i<=score.Length=7就会报“索引超出了数组界限的错误,所以应该是i<score.Length
for (int i = 0; i <= score.Length; i++)
{循环语句;}
(1)为什么超过数组大小还能存储扩展阅读:
数组下标变量
对于以线性寻址的向量,索引为i的元素处于位址B+c×i,其中B是固定的基底位址,c为常数,
有时称为位址增量或跨步。
如果有效的元素索引从0开始,则常数B只是数组第一个元素的位址。因此C语言指定数组的索引一定从0开始;许多开发人员会将该元素称为“第零”而不是“第一”。
然而若适当选择基底位址B,来作为第一个元素的索引起始值。譬如数组有五个元素,索引为1到5,基底位址B以B+30c来替换,则相同数组的这些元素索引将转为31到35。如果编号从0开始,则常数B可能不是任何元素的位址。
Ⅱ 为什么我设定了字符数组的长度为10个元素,可还是能保存超过10个字符呢程序如下:
问题的实质是 scanf不知道你str的长度,会打印直至\0结束,你输入超过10个已经数组越界了,是危险的代码,不能这么写。
Ⅲ 错误的数组或着数组超出界限什么意思
数组就像一个仓库,一般都是预先定义好大小的,里面可以随意存储数据(定义格式的数据),当要存储的数据数量超了这个仓库定好的容量的时候就会溢出,就会出现数组超越边界的现象。
Ⅳ 为什么用数组可以存储超过计算机数据范围要求的数字
数组相当于把一个很大的数按一定数位拆分为若干个部分数字
如这个数字假如用整型变量是表示不了的
但你可以用整型数组把这个数每5位拆分开,如12345,67890,12345,67890,12345,67890这样我们用6个整型数组元素就可以保存。但计算时就要进行技术上的处理。建议你看一下高精度运算方面的资料。
Ⅳ 数组的大小数组中能够存放多少个数组元素
这个问题 应该这么说:如果定义的是一个简单类型的数组,例如:int my_int_array[100] ; 那么最多能够存放:100个元素,且每个元素的详细大小为:sizeof(int) ;数组的合法存取下标为:my_int_array[0] -- my_int_array[99],如果超过了这个范围,那么就会产生数组越界,程序就会出现错误了。
如果定义的是一个复合类型的数组,例如:结构数组。举例如下:
struct myself_datatype
{
char name[40] ;
int sex ;
int age ;
} myself_data ;
myself_data my_struct_array[100] ;
那么结构数组中的每一个元素所占的空间大小就是:sizeof(myself_data.name) + sizeof(myself_data.sex) + sizeof(myself_data.age) 。
Ⅵ 如果输入的数据量过大还能用数组来存储么
c对数组越界并不处理。
定义数组长20,实际写入20个元素后继续写入,通常会在其后连续的内存区写入。
所以程序里输入长度21,
for(i=1;i<=len;i++)
printf("%d ",r[i].key); //程序忠实输出21个元素
实际上,你的数组越界2个元素了。C的数组从下标0开始。
===============================
试验了一下,具体的编译器对此处理不同.
假如:
int a[2],i;
a[2]=3;i=4;
printf("%d,%d\n",a[2],i);
printf("%x,%x\n",&a[2],&i);
在TC下编译,a[2]和i使用同一个地址(越界数组连续存放),当然数值也是一样,都为4.
在VC下,可以编译,运行至打印地址出错.但把a[2]=3,i=4分开了.
具体情况,要看你的RecordType如何定义和使用什么编译.