【问题标题】:C: Define global array variable that user can declare its sizeC:定义用户可以声明其大小的全局数组变量
【发布时间】:2016-01-17 00:58:09
【问题描述】:

我想用 C 语言设置一个 int 数组的全局引用,但我想在 main 函数中初始化它(实际上是用户要声明它的大小)。有人知道这是怎么做到的吗?

提前致谢!

【问题讨论】:

  • 使用全局变量通常不是一个好的解决方案,为什么不将数组及其大小从其他模块传递给函数?
  • 形式上,你不能那样做。全局数组的大小在编译时是固定的。您可以通过使用全局指针并在任何代码使用它之前分配正确的空间来实现等效效果。但通常最好避免使用全局变量。这并不总是一个好主意:stdinstdoutstderr 是全局变量,如果不是,那将是一个令人困惑的麻烦。 OTOH,errno 是全球性的并设法提出问题,尽管该标准现在已经部分消除了其中最糟糕的问题。

标签: c arrays input


【解决方案1】:

将指向 int 的指针声明为全局变量,并在 main 中使用 malloc 对其进行初始化。

/* outside any function, so it's a global variable: */
int *array;
size_t array_size;

/* inside main(): */
array_size = user_defined_size;
array = malloc( sizeof(int)*array_size);
if ( array == NULL) {
    /* exit - memory allocation failed. */
}
/* do stuff with array */
free(array);

如果您需要从另一个模块(源文件)访问全局变量,请在此处再次声明它使用

extern int *array;
extern size_t array_size;

或者,最好在包含在任何使用该数组的源文件的头文件中声明它们extern,包括定义它们的源(以确保类型一致性)。

【讨论】:

  • 应该在定义指针 (array) 的文件以及使用数组的源文件中使用标头。这确保(或尽最大努力确保)数组的定义和使用及其大小是一致的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2021-05-29
  • 2013-06-05
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多