[英]Declare global array from function in C
也许这个问题在某个地方回答了,但我找不到。 我想声明全局数组。 但是这个数组的大小取决于我的输入。我该怎么做?,谢谢
想法是:
char* array[maxsize];
int main(){
int maxsize;
scanf("%d",&maxsize);
}
编辑:如果数组是2D数组怎么办?
您所说的被称为动态分配,它与普通分配有些不同(发生的情况是内存的不同部分),要在C中使用stdlib.h中的函数(请记住#include)它)称为calloc,它接受两个参数,分别是元素的数量和每个元素的大小,因此,假设您需要一个char数组,则代码将类似于以下内容:
char *array;
int main(void)
{
int maxsize;
scanf("%d", &maxsize);
array = calloc(maxsize, sizeof(char));
}
您会注意到,在声明数组之后没有[],这是因为它不是数组而是指针,但是不用担心您仍然可以像数组一样访问索引。 因此,只要您在数组中至少有2个元素,array [1]仍然可以使用。
像这样使用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,并且如果您在其中复制某个字符串,则该字符串已经为零终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.