例如,我想要一个最大长度为 20 的单词数组。我从用户输入中获取要存储的单词数。声明上述数组的内存效率最高的方法是什么?
我可以做这样的事情,但我猜它的内存效率不是很高?
char wordArray[1000][20];
也就是说,我希望“1000”根据用户的输入而变化。我不能这样做。
int main()
{
int size;
printf("Enter size: ");
scanf("%d", &size);
char wordArray[size][20];
}
最佳答案
通常栈的大小很小,你不能在栈上分配这么大的内存。这样做会导致堆栈溢出。你需要动态分配。
int size;
printf("Enter size: ");
scanf("%d", &size);
char **wordArray = malloc(size*sizeof(char *));
for(int i = 0; i < size; i++)
wordArray[i] = malloc(20);
调用free
来解除分配。
但是,请注意,这将分配经过碎片整理的内存,而不是像二维数组那样连续分配。要获得连续的内存分配,您可以使用指向数组的指针作为
int (*wordArray)[20] = malloc(size * sizeof(*wordArray));
并以 wordArray[i][j]
的形式访问元素。
有关更详细的解释,请阅读 c-faq 16.6: How can I dynamically allocate a multidimensional array?
关于c - 根据输入声明一个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28543452/