全局数组问题未更新,C 编程



>我有一个程序分布在多个文件中。有许多函数需要访问全局数组。我遇到的问题是在程序启动之前我不知道数组的大小。它打开一个文件,然后下载一些点,然后创建具有相应大小的数组。但是为了使数组是全局的,它需要在 main 函数之外声明,即在我知道点数之前。

我现在试图做的是:

文件1.c:

#include <stdio.h>
#include "file3.h"
int useful[];
int main()
{
int useful[10];
int i;
for (i = 0; i < 10; i++) {
useful[i] = i+1;
}
SPN();
return 0;
}

文件2.c:

#include <stdio.h>
#include "file3.h"
void SPN() {
int i;
for (i = 0; i < 10; i++) {
printf("%in", useful[i]);
}
}

文件3.h:

extern int useful[];
extern void SPN();

我在输出中得到的只是一堆 0。起初我认为第二个 int 有用[...in file1.c 创建一个具有不同内部名称的新数组,但考虑到 SPN() 在尝试访问数组边界之外的内存时不会触发分段错误,这似乎没有任何意义(如果有用[] 创建一个数组并且没有更改,它的默认大小为 1,即<10)。帮助?

int useful[10];没有初始化全局int useful[];或类似的东西。这是一个新变量,这里的循环

for (i = 0; i < 10; i++) {
useful[i] = i+1;
}

您正在修改第二个useful而不触及全局。然后在函数结束时丢弃。

而是有一个像这样的全局变量:

int *useful;

并以此方式初始化它:

useful = malloc(sizeof(int)*10);

main内部useful的声明掩盖外部声明。 这意味着您认为在全局变量中插入的值(在main中)实际上进入了局部变量。

有关详细信息,请查看以下有关阴影的文章。

在 C 语言中查看范围规则也可能很有趣。

相关内容

  • 没有找到相关文章

最新更新