从C中的函数声明全局数组

时间:2015-05-06 02:08:08

标签: c

也许这个问题在某个地方得到了解答,但我找不到它。我想声明全局数组。但是这个数组的大小取决于我的输入。我该怎么做?,谢谢

想法是:

char* array[maxsize];

int main(){
    int maxsize;
    scanf("%d",&maxsize);
}

编辑:如果数组是2D数组怎么办?

2 个答案:

答案 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,如果你复制了一些字符串,那么它已经零终止。