2013-04-13 102 views
0

所以,如果我有東西,是動態與此類似(即,通過一個for循環迭代)...動態大小數組

for (i=0; i <= SCREENWIDTH; i++) 
{ 
} 

,我想創建一個大小屏幕寬度的數組,並添加條目到它。有什麼辦法可以做到這一點?

所以僞明智那就......

int[SCREENWIDTH] e = {1,2,....SCREENWIDTH} 
for (i=0; i <= SCREENWIDTH; i++) 
{ 
    e[i]= i; 
} 
+0

不太明白你的問題,你想創建一個大小爲「SCREENWIDTH」的動態數組?或創建大小爲「SCREENWIDTH」的動態數組也是動態的? – taocp

+0

動態數組使用malloc,int * e =(int *)malloc(sizeof(int)* SCREENWIDTH);但是,你也知道SCREENWIDTH值,我認爲你不需要這樣做。 –

回答

2

你可以做到這一點,像這樣:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int SCREENWIDTH = 80 ; 
    int *arr = (int *)malloc(sizeof(int) * SCREENWIDTH) ; 

    if(NULL != arr) 
    { 
     for(int i = 0; i < SCREENWIDTH; ++i) 
     { 
     arr[i] = i ; 
     } 

     for(int i = 0; i < SCREENWIDTH; ++i) 
     { 
     printf("%d, ", arr[i]) ; 
     } 
     printf("\n") ; 
    } 
} 
0

在C您可以使用malloc創建動態數組。示例在您的情況下:

int * e = (int*)malloc(SCREENWIDTH*sizeof(int)); 

一旦您以這種方式動態分配內存。接下來的想法是使用循環初始化數組。

您訪問循環的方式存在錯誤。在C中索引從0開始到n-1。

示例:在您的情況下,只能從e [0]訪問e [SCREENWIDTH-1]。

所以,請糾正您的循環,使其成爲我< SCREENWIDTH。所以,這將是

int *e = (int*)malloc(SCREENWIDTH*sizeof(int)); 
for (i=0; i < SCREENWIDTH; i++) 
{ 
    e[i]= i; 
} 
+0

我正在移植代碼,我沒有這樣做,我不願意改變它,直到我確信這是合法的。除了最壞的情況,我會超過/低於1 px。但這是個好建議。 – Jackie