2 gotime yx GoTime_yx 于 2017.08.28 13:57 提问

这段代码编译不通过的原因是什么?为什么不能通过

#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;

}

5个回答

dachunfree
dachunfree   2017.08.28 14:05
已采纳

头文件就一个#include?

GoTime_yx
GoTime_yx 回复dachunfree: 上班没事的时候,尝试一下,发现的。糊涂了
3 个月之前 回复
dachunfree
dachunfree 定义部分都写在了main函数外面 int *p = &a[0]; p = &b; 放在main里面 况且你这两个东东没用啊
3 个月之前 回复
GoTime_yx
GoTime_yx 自己突然糊涂了。谢谢你 语句不能放到函数体外面的
3 个月之前 回复
GoTime_yx
GoTime_yx 对啊,和头文件无关的,没用到其他函数,这个头文件包含的内容足够了
3 个月之前 回复
qq_34658785
qq_34658785   2017.08.28 14:07

p = &b;
C语言中全局变量只能在初始化的时候进行赋值或者函数内部进行赋值
在函数外部对变量的声明,是为了在编译阶段给程序分配内存空间,因此(在函数外部)声明变量的时候对变量进行赋值,只是对分配的内存空间进行初始化。但程序的内部,函数的调用顺序是无序的(并不是在文件中从上到下依次执行),如下图,因此,如果c的语法允许在函数外部对变量赋值,则变量的值是不可预测的。

GoTime_yx
GoTime_yx 你这个回答满分。
3 个月之前 回复
GoTime_yx
GoTime_yx 谢谢
3 个月之前 回复
qq_34658785
qq_34658785 http://www.cnblogs.com/3me-linux/p/4063154.html体可以看这篇博客
3 个月之前 回复
XianRenShan
XianRenShan   2017.08.28 14:13

c语言格式不应该是这样的吗?
#include

int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");

return 0;

}

参考:http://www.runoob.com/cprogramming/c-tutorial.html

GoTime_yx
GoTime_yx 谢谢
3 个月之前 回复
SeaTalks
SeaTalks   2017.08.28 14:20

问题出在p=&b;这一句。
全局变量定义后,要在函数或方法中进行操作,因为它们要被放在数据段中,而函数编译成的指令后放在代码段中。

SeaTalks
SeaTalks 回复GoTime_yx: exactly
3 个月之前 回复
GoTime_yx
GoTime_yx 你说的很具体,谢谢。关键数据段代码段这些全靠理论,完全看不见。哈哈
3 个月之前 回复
GoTime_yx
GoTime_yx   2017.08.28 14:04

# ## 语句不能放到函数体外面****

Csdn user default icon
上传中...
上传图片
插入图片