繁体   English   中英

从C函数声明全局数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM