在设计时,我可以像这样声明一个变量:
char szDesignTimeArray[120][128];
上面的声明是120个大小为128的数组。在运行时我需要分配以下内容:
char szRunTime[?][128];
我知道数组的大小,但不知道需要分配多少个数组。当我知道数组的数量时,我如何声明并分配它们?感谢一切
kdfy810k1#
我假设在运行时您也知道Row_Size。可以在运行时动态分配多维数组,如下所示:
#include <stdlib.h> int **array; array = malloc(nrows * sizeof(int *)); if(array == NULL) { fprintf(stderr, "out of memory\n"); exit or return } for(i = 0; i < nrows; i++) { array[i] = malloc(ncolumns * sizeof(int)); if(array[i] == NULL) { fprintf(stderr, "out of memory\n"); exit or return } }
参考:http://www.eskimo.com/~scs/cclass/int/sx9b.html
eeq64g8w2#
静态地知道行的长度后,还可以分配
char (*szRunTime)[128]; // obtain row count szRunTime = malloc(rowCount * sizeof *szRunTime);
内存指向指向char[128]的指针。这样,你就得到了一个连续的内存块,这可能会给予更好的局部性,而且你只需要free一个指针。如果行数不太大,则使用变长数组,
char[128]
free
rowCount = whatever; char szRunTime[rowCount][128];
但是,如果支持C99或更高版本,则可能是最佳选择。
nimxete23#
使用这个,,其中Variable是您想要的数组数量:
char **szRunTime = malloc(sizeof(char *)*Variable); int i; for(i=0 ; i<Variable ; i++) szRunTime[i] = malloc(sizeof(char)*128);
3条答案
按热度按时间kdfy810k1#
我假设在运行时您也知道Row_Size。
可以在运行时动态分配多维数组,如下所示:
参考:
http://www.eskimo.com/~scs/cclass/int/sx9b.html
eeq64g8w2#
静态地知道行的长度后,还可以分配
内存指向指向
char[128]
的指针。这样,你就得到了一个连续的内存块,这可能会给予更好的局部性,而且你只需要free
一个指针。如果行数不太大,则使用变长数组,
但是,如果支持C99或更高版本,则可能是最佳选择。
nimxete23#
使用这个,,其中Variable是您想要的数组数量: