2013-03-04 60 views
2

我試圖創建一個double數組的數組,我知道我能做到這樣,不能創建雙打

double a[200]; 

但爲什麼我不能創建一個這樣嗎?

int b = 200; 

double a[b]; 

它不工作。

任何人都可以幫助我嗎?

UPDATE:

int count; 
count = 0 
while (fgets(line,1024,data_file) != NULL) 
{ 
    count++; 
} 

double *x = (double *)malloc(count * sizeof (double)); 

double xcount = 1.0; 

for (int i = 0; i < count; i++) 
{ 
    x[i] = xcount/f; 
    xcount = xcount + 1.0; 
    printf("%lf\n", x[i]); 
} 
+3

因爲數組具有恆定的大小。那麼,C有一些稱爲VLA的新功能,它允許這樣做,但是你的編譯器不能支持它。 – Pubby 2013-03-04 02:17:19

回答

2

C不支持動態數組大小。您必須動態分配內存並使用指針。

int b = 200; 

double *a; 
a = malloc(b * sizeof (double)); 

在此之後,你可以訪問,就好像它是一個數組。

+0

在這種情況下,它會像'a =(double *)malloc(b * sizeof(double));''相反,對吧? – SamuelNLP 2013-03-04 02:26:17

+1

無需轉換'void *'(因爲'malloc'的返回值是) – MByD 2013-03-04 02:27:35

+0

'無效轉換從'void *'到'double *'[-fpermissive]' – SamuelNLP 2013-03-04 02:29:50

3

@DoxyLover是完全正確的,此外,如果你想要的是使用一個常數作爲數組的大小,你可以使用像C++的#define kMaxN 200const int kMaxN = 200這樣的marco。

如果你想的Alloc函數的數組,你可以使用它像

int foo(int n) { 
    int a[n]; 
} 

,或者如果你想傳遞一個多維數組作爲參數,你可以使用

int foo(int n, int arr[][n]) { 
... 
} 
+0

我有一個文本文件,我的b是計數行的結果,所以它不能保持不變。計數行後,我創建一個數組重新讀取行,但這次將其中的值添加到數組。 – SamuelNLP 2013-03-04 02:33:35