如何申明維數很大的二維陣列,如何定義大維度的二維陣列

2022-06-05 03:46:08 字數 4013 閱讀 4841

1樓:匿名使用者

其實可以用動態分配的方法:

int num1 = 100000;

int num2 = 10000;

int **ptr=new int*[num1];

for(int i=0;i

清除時只要反著來就可以了:

for(int i=0;i

delete ptr;

2樓:匿名使用者

大哥啊,你真猛。

首先我的機子上 sizeof(long) = 4

那咱們計算下你要多大的記憶體空間吧:

4 * 10000 * 100000 位元組

= 4 * 10000 * 100000 / 1024 kb

= 4 * 10000 * 100000 / 1024 / 1024 mb

= 4 * 10000 * 100000 / 1024 / 1024 / 1024 gb

= 3.7252902984619140625 gb

丫丫的,我開發用的pc機才2個g的記憶體,還哪兒能讓你一次就申請3個多g的記憶體啊???

啊,才看清你的資料型別是 long long , 那你申請的記憶體就再翻倍吧!!

3樓:匿名使用者

動態申請,自己搜尋一下

4樓:靈寂天尊

陣列下標的值是有上限的

如何定義大維度的二維陣列

5樓:莊政警

這是因為棧空間不夠用了 (棧空間就是編譯器給自動變數分配的記憶體空間,一般也就分配幾百k--2m左右)

你可以使用靜態陣列,或者全域性陣列

靜態陣列最簡單:加個static就行了

static int a[1000000][8]; //這樣陣列a就不使用棧空間了

把陣列定義在函式外面成為全域性陣列也可以達到不使用棧空間的目的

c語言問題。我想宣告一個超大的二維陣列——a[1000][1000],如何實現?

6樓:小羊裝狼

直接定義 int a[1000][1000];變數存放在棧裡,這個要看編譯的時候棧的大小。

如果棧空間不夠大,可以通過new實現。

int **a = new int *[1000];

for(int i=0;i<1000;i++)

7樓:南瓜豬的的的

宣告跟大小沒有關係

直接 extern int a[1000][1000];

定義的話不要把這個陣列放到{}裡面

例如int a[1000][1000];

int main()

用c語言如何定義一個較大的二維陣列,例如1000行1000列

8樓:匿名使用者

void main()

這樣定義沒有問題

array size too large (陣列太大)分析:定義的陣列太大,超過了可用記憶體空間。

可能是你的可用記憶體空間太小

9樓:小小缺

用int定義所佔空間較大,如用unsigned char定義空間會節約很多,不過還是不能滿足1000行1000列的要求,微控制器內的資料儲存單元是有限的,程式設計不僅僅是軟體的事,也要了解所有微控制器的內部結構與硬體資源,軟硬結合才能更快進步,希望能對你學習c有所幫助。

10樓:匿名使用者

簡單來說,直接定義就可以了。比如int a[1000][1000];

但是如果你的陣列非常非常大,那就需要考慮棧記憶體問題了。因為直接定義的陣列是存放在當前執行緒棧空間的。一般執行緒棧空間都會有預設值(可能有1mb到10mb不等),具體取決於作業系統的預設分配策略。

也可以通過建立執行緒的時候自己設定。

更合適的方式是用動態分配記憶體,c語言中對應的是malloc函式。動態空間是在堆(heap)上分配的,可以使用的記憶體一般都會很大。動態分配二維陣列可以參考:

11樓:匿名使用者

如果是在微控制器的話, 你根本就不可能建立這種二維陣列。

即使在pc端也不建議建立這麼大的陣列。

c語言二維陣列允許定義的最大值

12樓:匿名使用者

你定義多大就會申請多大的記憶體,所以這個錯誤主要看你的機器的記憶體大小以及編譯器允許的記憶體大小,一般機器char的最大範圍在10^7左右int在10^6左右,你是10^8級別太大了

如果用超級計算機就是非常大也沒有問題的。

二維陣列沒有定義的最大值的限制,主要是記憶體限制

13樓:藍人

你申請的陣列是放在堆疊上的,對於windows來說, 這個值應該是4m,你現在申請了100m,怎麼能申請的了呢?? 實在想用這麼大記憶體,使用malloc

14樓:竹樓聽雨

最大值主要看是什麼記憶體限制了

要在c++中定義一個很大的矩陣,如何定義

15樓:匿名使用者

c++用應對這個數學向量矩陣運算有一個 valarray,你可以看下可能是你需要的,你可以瞭解下。

#include

using std::valarray;

16樓:匿名使用者

int map[1000][2000]

17樓:匿名使用者

有以下幾種方法在c++中定義大矩陣:

陣列定義

直接使用陣列進行定義,這種情況一般會使用靜態地址,陣列訪問下標也比較方便。但是在數量上不能太大。因為這類陣列一般會分配到系統的棧空間,而對windows來說,這個空間大約是2m左右(也有的資料說是1m),總之大小是一常量。

定義和使用陣列的方法如下:

int a[500][200];//定義一個二維陣列int k=a[3][5];//將一個陣列元素賦值給k2.申請指標空間

通過指標申請一個較大的空間,再使用演算法計算元素所在的位置。

由於申請的空間在堆上,而堆的空間容量要遠大於棧空間。所以它在容量上會更大,但是在使用時,需要使用**計算元素的地址,複雜度稍有提高。

定義和使用方法如下:

int * a=new int[1000*2000];//定義指標a,且向系統申請1000*2000個資料元素需要的空間

int k=*(a+20);//將a[20]賦值給k

18樓:匿名使用者

根據用途可以定義成二維陣列,也可定義成連結串列。

19樓:最終幻夜

定義成全域性變數 也就是寫在 main函式的外面

怎樣用c++宣告一個二維陣列是未知大小的,比如說是一個矩陣的大小,大小由輸入者確定,該怎麼宣告呢

20樓:兔子和小強

c/c++無法宣告一個不定大小的二維陣列,不過可以用二級指標來模擬(我想你清楚陣列和指標的區別吧)

int **a; //宣告二級指標a,指向一個指標陣列(切記不是指向一個二維陣列)

cin >> m >> n; //輸入兩個維度a = new int *[m]; //開闢指標陣列for(i=0; i

a[i] = new int[n];

這樣以後使用a[i][j]就像二維陣列一樣

21樓:兵兵老師

int m,n;

int *p;

new *p=int[m][n];

通過以上方法,即動態開闢儲存空間,把開闢的陣列的地址賦給指標變數p,通過指標變數p呼叫它,陣列的大小有輸入者確定,即由輸入者輸入的m、n的數值決定。

若a為二維陣列,則a等價於Aa,若a為二維陣列,則a13等價於。Aa13Ba13Ca13Da

選擇b a 1 3 等效於a 1 3 定義一個二維陣列a 3 3 請問a與a 0 等價嗎,a 1 與a 1 等價嗎,a 1與a 10 a是二維陣列的首地址,而a 0 同樣是二維陣列中第一行的首地址,是等價的。a 1 是第二行首個元素,a 1 是其地址,不等價。a 1 與a 1等價 單獨一個a就是指a...

c語言中二維陣列的定義問題C語言中二維陣列的定義問題

正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第一個維度預設是 舉個例子 int tar 2 因為大括號中有4個元素,而且第二個維度是2,所以就可以計算出來第一維度是2.所以是可以預設的。2.你的這個例子中,第一維預設的應該是 7 8 1 ma...

c語言二維陣列

因為你的s是一個二維陣列。如果你的s是一維陣列,像s 20 這樣,那麼在gets時不需要加 0 你定義的s是個二維陣列,並且是char型別,所以每一行存放一個字串。s n 代表第n 1行,而gets時的引數需要是一個字串指標,或者字串陣列名,所以這裡必須要寫作gets s n 其中0 n 20 我明...