Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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_Static_Global_Extern - Fatal编程技术网

C 如何更改另一个文件中存在的外部变量的值?

C 如何更改另一个文件中存在的外部变量的值?,c,static,global,extern,C,Static,Global,Extern,我在head.h中定义了一个静态整数,如下所示 //头 #include <stdio.h> #include <stdlib.h> static int a = 100; 当one.c正在等待时,我执行了two.c,它将a的值更改为80,我在head.c中将“a”声明为static,因此它只有一个内存来存储该值,不会创建副本。按ENTER键,2.c打印a的值为80。但现在,当在1.c中按Enter键时,它仍然打印100 //二、c #include "head.h"

我在head.h中定义了一个静态整数,如下所示

//头

#include <stdio.h>
#include <stdlib.h>
static int a = 100;
当one.c正在等待时,我执行了two.c,它将a的值更改为80,我在head.c中将“a”声明为static,因此它只有一个内存来存储该值,不会创建副本。按ENTER键,2.c打印a的值为80。但现在,当在1.c中按Enter键时,它仍然打印100

//二、c

 #include "head.h"

 extern int a;
 int main(void)
 {
     a = 80;
     getchar();
     printf("Value of a : %d\n", a);
     return 0;
 }

为什么这不起作用,如果有其他方法来更改外部变量,请告诉我。

两个不同的进程无法看到彼此的地址空间,因为i386是专门为保护进程地址空间而制造的

如果您需要两个不同的进程和每个进程的共享内存,那么您需要线程,它不是一个进程,但它具有相似的行为

哦,当然你仍然可以像这样使用标准的输入输出:

在第一个过程中:
printf(“%d\n”,send)
在第二个过程中:
scanf(“%d”和&recv)

但要使其工作,必须按如下方式运行程序:

/proc1 |/proc2

但是不是
/proc2 |/proc1
/proc1&&/proc2
并且不在不同的终端中


您也可以使用管道,如果需要,请在注释中询问我,我将说明

两个独立的C程序不共享任何变量,除非您对操作系统进行一些特定调用以在两个程序之间共享内存。只是一个小建议,并不是说i386是专门为保护进程地址空间而设计的。这是您运行的任何操作系统的一个特性。进程隔离也可以在ARM、MIPS和其他体系结构上完成。
 #include "head.h"

 extern int a;
 int main(void)
 {
     a = 80;
     getchar();
     printf("Value of a : %d\n", a);
     return 0;
 }