當前位置:首頁 » 服務存儲 » 為什麼超過數組大小還能存儲
擴展閱讀
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如何定義和使用什麼編譯.