c語言陣列下標太大怎麼辦,C語言陣列下標太大怎麼辦?

2022-01-24 09:01:04 字數 3007 閱讀 1731

1樓:風若遠去何人留

當需要陣列分配很大的空間,且為區域性變數時,有可能會出現執行出錯的情況。

這是因為,對於每個程序/執行緒,棧空間大小是有限的,而區域性變數的記憶體是在棧上分配的,如果區域性變數過大,則會出現分配失敗的情況。

要解決這個問題,有兩種方式:

1 將陣列定義為全域性變數。

全域性變數分配時,會分配在全域性變數空間,不受棧空間大小影響。

這種方法的好處是,**簡單,只需要將定義從函式內移動到函式外即可,其它不需要改變。

缺點是,在程式執行全程均需要佔用該部分記憶體,很多時候這是一種浪費。

2 使用動態記憶體空間。

通過malloc,calloc, zalloc等函式,可以分配動態記憶體空間。該空間會分配在堆上,同樣不受棧空間的限制。

不過這種方法使用後,必須通過free函式呼叫釋放空間。

該方法的好處是,用後釋放,不繼續佔用。

缺點是,**複雜,必須儲存原始分配空間的首位址,並對其釋放,否則會出現記憶體洩露。

2樓:匿名使用者

放棄陣列,選擇連結串列。

使用連結串列結構可以克服陣列連結串列需要預先知道資料大小的缺點,連結串列結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。

3樓:匿名使用者

試試定為全域性變數,因為你定義在函式內部它其實用的是內建棧空間,太大會導致溢位

4樓:匿名使用者

這種做法編譯器會不通過,因為陣列是連續分配空間,這麼大的空間很難正常分配。

可以採用二維動態陣列:

int m=7500,n=7500;

int **s=new int*[m];

for(int i=0;i

5樓:匿名使用者

難!!!

你為什麼要這麼大的陣列呢?

c語言中陣列下標最大為多少

6樓:匿名使用者

陣列下標最大為陣列個數減一,例如定義:int a[5];則陣列a的下標最大為4;

因為在c語言中陣列的下標是從0開始的,這樣從0到陣列個數減一,共陣列的總個數。

例如:#include

int main()

/*執行結果:

1 2 3 4 5

1  2  3  4  5*/

7樓:匿名使用者

額、、、、

沒有那麼多的吧記憶體吧

比如說int a[5] 他的意思是 在記憶體中連續分配5個整形變數的空間

在vc中 int是4個位元組(記憶體大小)

一般計算機的記憶體是2g吧 也是一定的。

誰像你那麼狠得,吧記憶體全拿來開闢陣列的空間了連函式都沒辦法執行了。

8樓:

取決於你的記憶體大小 以及 你的陣列型別

對於不同的陣列型別其元素佔的記憶體大小是不同的,比如字元陣列、結構體陣列、指標陣列……

只要記憶體裝的下就行

9樓:匿名使用者

看記憶體嘍,比如int型 每個a[i]佔4個位元組,如果下標太大,就無法再記憶體中申請足夠的空間

10樓:心雲細雨

a[n] 陣列a有n個元素,下標從0 開始,最大值是n-1

c語言陣列下標可以為負嗎

11樓:金色潛鳥

分清宣告還是語句。

宣告裡的中括號裡的數字不能為

負。例如 int a[-2]; 是錯的,陣列大小不能為負。

語句裡的中括號,c/c++ 看成運算子,不叫標點符號。

陣列元素和指標有恒等關係:

a[i] == *(a+i)

所以,i 為 負 的時候,a[i] == *(a- fabs(i))。只要 a-fabs(i) 這個位址裡 有 數值,就可以拿來 運算使用。

"很多書上說陣列下標不能為負" -- 因為是初級教材。

高階教材裡甚至提到, a[i] == i[a] 這也是正確的 !(有人在「知道」裡問過,我也回答過。)

當然,只能是變數形式,不能寫阿拉伯數字,事實上,也確確實實正確的。

12樓:匿名使用者

是這樣的,如果你定義了乙個陣列後,比如 int a[5]; 在記憶體中會為這個陣列分配5個儲存單元,此時如果你用這5個單元是完全沒問題的,因為這5個已經被你申請了,而其他沒被申請的單元是不能隨便用的,比如 a[-2]是表示 a[0]前的兩個單元(每個大小編譯系統會根據你宣告的陣列元素的型別確定,在這個問題中每個單元都是 int型的),如果碰巧這個單元沒被分配給其他變數時你使用會沒有問題,但是如果已經被其他變數佔據,那此時你使用就會出現問題,所以書上要求不能為負的是正確的,你的使用沒問題是巧合。即使偶爾可以使用,也不要這樣做,第一這樣做沒什麼意義,第二會使程式存在潛在的隱患。

而如果你在你的程式裡再有下面的定義語句的話 int *p=&a[3]; 那你使用 p[-2]就完全沒問題了,因為它表示 a[1].

13樓:

下標可以是負值,它的意思是向前定址,前提是你知道向前定址尋的記憶體位址的東西是你之前已經指定好的,就相當於你動態開闢一塊記憶體給你的陣列,這樣這個記憶體裡面的所有資料都是你需要的,向前定址也沒什麼問題。

14樓:匿名使用者

不可以,下標必須是整數

c語言中陣列下標有下限嗎

15樓:天雲一號

c語言中陣列的下標是根據使用者定義的陣列大小來確定的,最小下標為0.

舉例說明如下:

int a[5]=; // 定義乙個int型陣列,並對其進行初始化。則共有a[0]、a[1]、a[2]、a[3]、a[4]這5個元素,所以其下標的範圍為0~5

更一般的就是

陣列a[n]的下標範圍為0~n-1

16樓:百度使用者

看書遇到了陣列下標的問題,在書上沒找到答案,書上問,如果有是多少?望各位大哥大姐幫幫忙啊

c語言陣列的下標總是從0開始嗎,C語言陣列的下標總是從0開始嗎

是的,對陣列a max max是乙個編譯時可知的值 來說,它的第乙個和最後乙個元素分別是a o 和almax 1 在其它一些語言中,情況可能有所不同,例如在basic語言中陣列a max 的元素是從a 1 到a max 在pascal語言中則兩種方式都可行。注意 a max 是乙個有效的位址,但該位...

c語言中,陣列元素的下標下限為,c語言中陣列元素下標的上下限是什麼?

c語言中,陣列元素的下標下限為0。陣列中的各元素的儲存是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a 0 表示名字為a的陣列中的第乙個元素,a 1 代表陣列a的第二個元素,以此類推。對於vb的陣列,表示陣列元素時應注意...

簡單的C語言陣列程式設計,c語言陣列的程式設計

一般有四種陣列定義方式,以一維陣列為例 定義指定維數的陣列int arr 10 定義不指定維數的陣列,陣列維數有初化列表元素個數決定。int arr 定義指定維數的陣列,初始化不完全時,系統將未初始化元素初始化為0int arr 10 動態分配乙個陣列。陣列例項 include int main v...