Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在哪里定义C中的常量数组?_C_Arrays_Initialization - Fatal编程技术网

我在哪里定义C中的常量数组?

我在哪里定义C中的常量数组?,c,arrays,initialization,C,Arrays,Initialization,我正在写一些C,我有一个int的查找表。我有点生疏了。。。在哪里声明和初始化数组,以便在多个C文件中使用它?我可以在H文件中声明它并在C文件中初始化它吗?如果我理解正确,是的,你可以这样做。读一些关于 extern static 关键词。如果我理解正确,是的,你能做到。读一些关于 extern static 关键字。您可以使用extern在头文件中声明它,并在一个源文件中定义它。但是,根据定义,它不能是静态的您可以使用extern在头文件中声明它,并在一个源文件中定义它。但是,根据定义,它不

我正在写一些C,我有一个int的查找表。我有点生疏了。。。在哪里声明和初始化数组,以便在多个C文件中使用它?我可以在H文件中声明它并在C文件中初始化它吗?

如果我理解正确,是的,你可以这样做。读一些关于

extern static

关键词。

如果我理解正确,是的,你能做到。读一些关于

extern static

关键字。

您可以使用
extern
在头文件中声明它,并在一个源文件中定义它。但是,根据定义,它不能是
静态的

您可以使用
extern
在头文件中声明它,并在一个源文件中定义它。但是,根据定义,它不能是静态的,全局变量应该在.h文件中声明,并声明为
extern
,然后在.c文件中定义。请参阅comp.lang.c常见问题解答


对于阵列,可能需要格外小心。参见comp.lang.c常见问题解答。

全局变量应在.h文件中声明,并应声明为
extern
,然后应在.c文件中定义。请参阅comp.lang.c常见问题解答


对于阵列,可能需要格外小心。参见comp.lang.c常见问题解答。

在一个c文件中定义数组,并在另一个c文件中将其声明为extern

一个常见的错误是将数组等同于指针,并执行以下操作:

// file1.c:
int array[] = { 1,2,3,4};

// file1.h:
extern int *array;

// file2.c:
#include "file1.h"

// use array
 // file1.h:
 extern int array[];
这是行不通的。在某些情况下,可以将数组的名称视为指针,但这不是其中之一。[编辑:正确的做法是:

// file1.c:
int array[] = { 1,2,3,4};

// file1.h:
extern int *array;

// file2.c:
#include "file1.h"

// use array
 // file1.h:
 extern int array[];

在一个C文件中定义数组,并在另一个C文件中将其声明为extern

一个常见的错误是将数组等同于指针,并执行以下操作:

// file1.c:
int array[] = { 1,2,3,4};

// file1.h:
extern int *array;

// file2.c:
#include "file1.h"

// use array
 // file1.h:
 extern int array[];
这将不起作用。在某些情况下,可以将数组的名称视为指针,但这不是其中之一。[编辑:正确的做法是:

// file1.c:
int array[] = { 1,2,3,4};

// file1.h:
extern int *array;

// file2.c:
#include "file1.h"

// use array
 // file1.h:
 extern int array[];

这个问题值得继续还是应该删除?这个问题值得继续还是应该删除?谢谢,这是我需要的提示。我认为OP的意思是“静态”在某种程度上,这与C语言中的关键字
static
的含义没有很好的关联:)。我已经发布了这两个词,因为它们都是指C语言中变量的可见性-外部作用域指向其他文件或使其在文件中显示为静态。谢谢,这是我需要的提示。我认为OP的意思是“静态”在某种程度上,这与C语言中的关键字
static
的含义没有很好的关联:)。我已经发布了这两个词,因为它们都是指C语言中变量的可见性-外部作用域指向其他文件,或者使其在文件中显示为静态。但是如果将
extern int*数组;
更改为
extern int数组[]
@R:好吧——既然你提到了它,我的答案可能不是很好,我的答案是要避免什么,而不是如何正确地做。“这么好”是一件主观的事情,但如果你不编辑,你就不会得到我的支持:)但是如果你把
外部int*数组;
改为
外部int数组[]
@R:好吧——既然你提到了,我的回答可能不是很好,因为我的回答谈到了应该避免什么,而不是如何正确地做。“很好”是一件主观的事情,但如果你不编辑,你就不会得到我的支持:)