【发布时间】:2015-10-13 02:51:36
【问题描述】:
(1)
#include <stdio.h>
#include <stdlib.h>
int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc;
d= 10;
e= 100;
pa = &a;
pb = &b;
int main()
{
printf("%i, %i, %i, %i", pa, pb, d, e);
return 0;
}
(2)
#include <stdio.h>
#include <stdlib.h>
int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc;
d= 10;
e= 100;
int main()
{
pa = &a;
pb = &b;
printf("%i, %i, %i, %i", pa, pb, d, e);
return 0;
}
为什么我在主函数(1)之外初始化指针变量pa和pb时会出错?当 pa 和 pb 在 main 函数中时,它工作得非常好(2)。为什么我可以在主函数(d,e)之外初始化普通变量而不是指针变量?
我在 CodeBlocks 中收到的错误消息是:Pa 的文件类型冲突。 pa 的先前声明在这里:第 4 行。
【问题讨论】:
-
(我不确定)但我相信您不能将语句放在您的
main之外执行,就像您希望它们在您的main中那样执行。虽然你可以声明变量。我相信当您编写pa = &a时,编译器并不知道您已经声明了pa。此外,如果您不提供数据类型,则会自动将其视为int,因此,当您编写pa时,编译器会将其设为int pa(不考虑您之前的声明),然后您尝试分配指向您的int的指针,这就是它给您错误的原因! -
内存分配只发生在main之后
-
@purpletech 这不是分配,全局变量不驻留在堆空间中
-
d= 10;、pa = &a;等行正在重新声明这些变量,而不仅仅是设置它们的值……只要类型与之前的声明匹配,这在文件范围内是允许的。由于您没有在这些行中给出类型,因此假定它是int,因此它与d和e的早期声明匹配,但与pa和pb不匹配。
标签: c variables pointers compiler-errors