也许这个问题在某个地方得到了解答,但我找不到它。我想声明全局数组。但是这个数组的大小取决于我的输入。我该怎么做?,谢谢
想法是:
char* array[maxsize];
int main(){
int maxsize;
scanf("%d",&maxsize);
}
编辑:如果数组是2D数组怎么办?
答案 0 :(得分:0)
你所谈论的内容被称为动态分配,它与正常分配(发生的是内存的不同部分)略有不同,要在C中执行此操作您使用的功能从stdlib.h(记得#include它)调用calloc,它带有两个参数元素的数量和每个元素的大小,所以假设你想要一个字符数组,代码看起来像这样:
char *array;
int main(void)
{
int maxsize;
scanf("%d", &maxsize);
array = calloc(maxsize, sizeof(char));
}
你会注意到在声明数组之后没有[],因为它不是数组而是指针,但不用担心你仍然可以像数组一样访问索引。因此,如果数组中至少有2个元素,那么数组[1]仍然可以工作。
答案 1 :(得分:0)
像这样使用calloc
#include <stdio.h>
#include <stdlib.h>
char* array=NULL;
int main()
{
int maxsize;
scanf("%d",&maxsize);
array = calloc(maxsize, sizeof(char));
free(array);
array = NULL;
}
这会在应用程序堆上动态分配maxsize
个字符。请注意,需要调用free
才能释放动态分配。如果不这样做,则称其为内存泄漏。在这个琐碎的程序中,如果没有被称为免费则不会太严重。
好的,从技术上来说,它不是一个数组指针,但两者大多是可以互换的。使用calloc
作为char数组是一个好主意,因为所有值都初始化为0,如果你复制了一些字符串,那么它已经零终止。