这段代码编译不通过的原因是什么?为什么不能通过
课程设计
1
#include
int a[10] = {0};
int b = 5;
int *p = &a[0];
p = &b;
void main(void)
{
int i = 0;
for(i=0;i<10;i++)
{
a[i] = i;
}
for(i=0;i<10;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
a[1] = a[2];
printf("a[1]=%d\n",a[1]);
return;
}
-
p = &b;
C语言中全局变量只能在初始化的时候进行赋值或者函数内部进行赋值 在函数外部对变量的声明,是为了在编译阶段给程序分配内存空间,因此(在函数外部)声明变量的时候对变量进行赋值,只是对分配的内存空间进行初始化。但程序的内部,函数的调用顺序是无序的(并不是在文件中从上到下依次执行),如下图,因此,如果c的语法允许在函数外部对变量赋值,则变量的值是不可预测的。
-
问题出在p=&b;这一句。 全局变量定义后,要在函数或方法中进行操作,因为它们要被放在数据段中,而函数编译成的指令后放在代码段中。
发表回复