当前位置:首页 » 服务存储 » 为什么超过数组大小还能存储
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

为什么超过数组大小还能存储

发布时间: 2022-07-25 17:06:06

Ⅰ 索引超出了数组界限是什么意思

数组下标一般是从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如何定义和使用什么编译.