c語言中陣列定義的問題

時間 2022-04-22 09:21:47

1樓:匿名使用者

主函式內定義的陣列在堆疊段中分配記憶體。

全域性變數陣列在資料段中分配記憶體。

一般資料段比堆疊段大很多,

所以堆疊段分配不了的記憶體,資料段可以分配

(1)在堆疊段中分配記憶體,由於太大無法分配,所以錯誤。

(2)在資料段中分配記憶體,資料段可以分配,無錯誤。

(3)陣列比(1)需要的記憶體少,在堆疊段大小範圍內,可以分配,無錯誤(4)同(3)

2樓:負家子弟

____________________

| stack區(陣列,指標,結構體,區域性變數)

____________________

| static變數(靜態變數,全域性變數)

____________________

| heep區(堆區)

____________________

| **段

____________________

乙個程式的記憶體分配是上面那個樣子的,因為靜態、全域性變數是在堆上分配空間的所以可以大一些(有多大就看你的系統和編譯器了,你可以分配比你的實際物理記憶體更大的空間編譯不報錯,執行就不行了)。

區域性變數是分配在棧上的,而棧是堆的一塊區域,所以大小是受限的,我在vc6+xp sp3裡面試的最大不能超過1036084位元組。棧的大小也是跟系統和編譯器有關。

自打電腦進入386時代以後所有的段都可以訪問到4g記憶體空間,就是所謂的平坦模式(看看彙編就知道了這部分內容在書的最後幾章一般都被忽略了),所以現在關於段的概念是比較模糊的,也不太常用。

你的第乙個定義錯了是因為超出是1036084(259021*4)這個範圍,你定義了300000,第三個是210000,第四個是200000,就對了。堆上的空間就不知道是多大了我試了5*1024*1024結果也沒溢位,可能會是個很大的數。

如果用動態分配的辦法,就是在堆上分配,就不受這些限制。

3樓:匿名使用者

第3個和第1個不是一樣的麼,怎麼乙個對乙個錯

在函式內定義的陣列,屬於auto型變數,占用的是系統棧的空間,而系統棧預設只有1m大小,放不了太大的陣列.

函式外定義的陣列,屬於全域性變數,占用的是全域性空間,比棧要大很多,所以可以放較大的資料

4樓:匿名使用者

這裡是一片很詳細的關於堆疊的文件你不妨看看!

負家子弟說的很好,但有些地方有出入建議你再看下這個定會有很好的理解

*********************************是啊富家子弟再次解釋一下吧~!!~

*********************************請問樓主你說的錯啦是指什麼啊,編譯通不過還是連線時啊還是執行時啊?謝謝

5樓:

這個不太好說,要看你是用那一種c編譯器了。

不同的編譯是不一樣的。如何你vs2005那是肯定不會出錯的。

6樓:匿名使用者

不知道你第一種定義錯誤是什麼?

關於C語言中陣列的定義

如果在參數列中,int 實際會被轉換成int 不信你可以試試這個程式 include void f int b 10 void main 至於為什麼,就是為了防止傳遞陣列,c認為有乙個原始的,就操作它好了,如果你覺得要另立副本,就自己新分配記憶體,或者用自己auto分配的記憶體,將內容複製過來。當然...

c語言中的二維陣列問題,c語言問題 c語言中二維陣列在記憶體中怎樣儲存?

目的是將緩衝區中輸入流中資料清除,可以使用 fflush stdin 清除資料 gets函式會把前面在scanf函式的輸入結束符即回車當做第乙個字串資料的結束符接收,因此不加gets s 就會導致資料個數少乙個。當然使用gets s 會提前接收了回車,因此也是起到同樣的作用。你程式函式中有個錯誤,p...

C語言中指標陣列的問題,c語言關於指標陣列的問題?

這樣看 0x00 0x78,0x99 0x78 h e l l 0 0 0x99 w o r l d 0 其中s就是0x00,然後,s 0 就是 0x00 0 0x00 取內容,得到的值是0x78,然後列印的就是hello s,就是相當於s 0 s 1,因為優先順序關係,先執行s 0 就是 0x78...

C語言陣列定義位址分配問題,c語言陣列在記憶體中是怎麼分配的?

使用c語言程式設計,實際上使用的記憶體只有一種 虛擬記憶體。根據功能的不同在c語言中又將虛擬記憶體為分三類 棧區 堆區 靜態資料區,無論單一變數還是陣列,其記憶體分配都是如此。其中,棧區 靜態資料區 堆區都會有編譯器負責分配 作業系統負責管理,程式設計師可以在堆區使用malloc 來動態分配堆記憶體...

C語言中陣列和指標的問題

呵呵,你這個問題提重複了。我的回答也給你重複貼一遍。a a a 0 都是乙個值,指向首位址。p1是取指標p1的位址,不是p1內容的位址。p1 p2相等,但是 p1 不等於p2。p3 與 陣列a沒關係,但是因為a 4 正好索引到陣列a最後乙個成員的下乙個位址,因此正好是p1的位址。這段解釋比較麻煩,畫...