1.c
代码: 全选
int a;
代码: 全选
extern int a;
代码: 全选
#include <stdio.h>
#include "2.h"
int main()
{
printf("%d",a);
}
代码: 全选
gcc 1.c 2.c
./a.out
于是猜想,变量a并没有显式初始化,一定是编译器给他初始化了。并且初始化为0。
为了配合我现在看的代码,写了简短的代码。2.h中定义一个结构体,并extern 1.c中的这种结构体变量的指针*a。在2.c中定义同样一个指针b并将它的值赋成a,然后使用指针b对其指向的空间显式赋值。
2.h
代码: 全选
struct abc{
int x;
};
extern struct abc *a;
代码: 全选
#include "2.h"
struct abc *a;
代码: 全选
#include <stdio.h>
#include "2.h"
int main()
{
struct abc *b;
b=a;
b->x=1;
}
代码: 全选
gcc 1.c 2.c
--
为了避免这样的段错误,于是在2.c中用malloc给a初始化再赋值给b,不再出现段错误。
但我所看的代码并没有在2.c中对a初始化。于是想在1.c中初始化。
用malloc初始化错误。a=(struct abc*)malloc(sizeof(struct abc*));(这句话是从2.c中copy的)报错。
若显式初始化a->x=1;报->语法错误。
----
在帖子中是否有笔误未知。