- 论坛徽章:
- 0
|
/*file1.c*/
extern int *array;
int main()
{
array[0]=1;
return 0;
}
/*file2.c*/
int array[5]={0};
首先我想问一下你是高手还是初学者?
如果你是高手的话,我觉得你这段代码列的不完整,没有办法分析.
如果你是初学者,我有几个问题?
1. 从语法上讲你的代码(只能叫代码,不能叫程序)没有任何语法错误,
但是有不好的地方.比如说在.c文件中用extern来声名一个全局变量,
我们一般将变量的定义放在.c文件中,如果你定义的变量要提供给另外
的.c文件使用,那么就在.h文件中声名此变量,如果不提供给外部,没有
必要这么写:extern int *array;
2. file1.c和file2.c是同一个工程的两个文件吗?
3. file2.c中的array数组是全局还是局部的?
4. 其实你的file2.c根本没有意义, 因为main函数在file1.c,任何C语言
的程序都是从main开始执行,你认为file2.c里的初始化语句会被执行吗?
5.运行时出错的原因是你使用的编译器将全局变量都自动初始化为0(当然
也不是所有的编译器都这么做,但Vc++6.0和gcc是这么做的), 所以
指针array的值是0,在main里的代码array[0]= 1;相当于*(array + 0)= 1;
也就是*array= 1;即*0 = 1;访问地址0,这恐怕是任何具有内存保护机制的
操作系统都不会允许的. |
|