extern声明结构体数组
时间: 2023-03-31 22:01:04 浏览: 606
可以回答这个问题。extern声明结构体数组是用来引用在其他文件中定义的结构体数组的。在当前文件中使用extern关键字声明结构体数组,可以让编译器知道该结构体数组在其他文件中已经定义过了,从而避免重复定义。
相关问题
extern 结构体数组
extern 结构体数组是指在一个源文件中声明一个结构体数组,但不进行定义和初始化,而是在其他源文件中进行定义和初始化。这样可以使得多个源文件共享使用同一个结构体数组。
在声明时,可以使用 extern 关键字来告知编译器该结构体数组的定义和初始化在其他源文件中进行。例如:
```c
// file1.c
struct MyStruct {
int num;
char name[20];
};
extern struct MyStruct myArray[10];
// file2.c
#include "file1.c"
struct MyStruct myArray[10] = {
{1, "John"},
{2, "Alice"},
// ...
};
```
在这个例子中,file1.c 中声明了一个 extern 结构体数组 myArray,但没有进行定义和初始化。在 file2.c 中通过包含 file1.c,并进行定义和初始化来完成对该结构体数组的实际定义。
这样,其他源文件也可以通过包含 file1.c 来访问和使用这个结构体数组。
结构体数组如何设定全局
要在程序的全局范围内声明一个结构体数组,需要在所有函数的外部声明它。具体步骤如下:
1. 在定义结构体时,先声明结构体的类型:
```
typedef struct my_struct {
int id;
char *name;
// ...
} my_struct;
```
2. 在所有函数的外部声明结构体数组:
```
my_struct arr[10]; // 定义长度为10的结构体数组
```
3. 在某个函数中对结构体数组进行初始化:
```
void init_arr() {
for (int i = 0; i < 10; i++) {
arr[i].id = i;
arr[i].name = "hello";
// ...
}
}
```
4. 在其他函数中可以直接使用全局的结构体数组:
```
void print_arr() {
for (int i = 0; i < 10; i++) {
printf("%d, %s\n", arr[i].id, arr[i].name);
}
}
```
需要注意的是,在多个文件中都需要使用同一个结构体数组时,需要在一个文件中声明它为extern类型,例如:
```
// 在文件a.c中声明结构体数组
extern my_struct arr[10];
// 在文件b.c中使用该结构体数组
void print_arr() {
for (int i = 0; i < 10; i++) {
printf("%d, %s\n", arr[i].id, arr[i].name);
}
}
```
这样可以保证多个文件都能使用同一个结构体数组。
阅读全文