2010-11-19 111 views
1

此代碼靜態數組是在C#正確在C#與C/C++

int x = int.Parse(Console.ReadLine()); 
     int[] t = new int[x]; 

但在C/C++中錯誤

int n; scanf("%d",&n); int a[n]; 

如何在c#靜態數組在運行時分配 (或在c#數組是動態的嗎?)

+9

你應該接受你的問題的答案。 – SLaks 2010-11-19 17:05:58

+1

以下是SO的工作原理。您提出問題,我們會盡我們所能回答他們。當您收到您喜歡的答案時,請點擊該答案旁邊的向上箭頭^以獲得最佳答案。其中一個答案將是您的特定情況的最佳答案。您應該「接受」而不是通過點擊該答案旁邊的複選標記來回答。當您接受或接受答案時,回答者會因爲努力而獲得「信譽積分」,這是驅動該網站的貨幣。您提出了很多問題,但從未接受任何答案。請回去接受答案 – 2010-11-19 17:43:24

+0

我不確定我明白你在這裏想問什麼。你能澄清嗎? – Bryan 2010-11-19 17:52:52

回答

4

C#數組在運行時分配給堆。

C數組在編譯時分配在堆棧上。
C也可以在運行時使用malloc分配數組。 (請記住free他們時,你就大功告成了)

+3

「只記得」是爲什麼很多編程語言被髮明的原因;) – Grozz 2010-11-19 17:55:33

+1

應該注意的是,如果'malloc'在C++中的位置不多。 (如果你真的知道自己在做什麼,並且正在進行微觀優化,則可能會很有趣),否則應該使用'new'。而且你也許不應該使用裸露的數組(除非你有一個很好的理由)。事實上,C++(大部分)是C的超集,意味着在C++中,你可以*在C中做任何事情,但你實際上不應該這樣做。 – Jasper 2013-11-06 00:01:29

3

在C++中,你需要做的:

int* a = new int[n]; 

// Do stuff with the array 

delete[] a; 
2

但在C/C++中的錯誤

int n; scanf("%d",&n); int a[n]

不!在C99中,這段代碼是正確的,因爲C99支持可變長度數組(VLA)。
在C++中,代碼格式不正確,因爲數組大小必須是C++中的常量表達式(儘管g ++支持VLA作爲擴展)。