2013-04-13 101 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