对于局部变量来说它即是声明也是定义而对于类或方法则有所不同,我曾经在多本英语书上写(看)过。现在我还没有达到了解底层的阶段不知道编译器是怎么做的,我想应该跟编译器也有关系吧呵呵
我支持 ivanniren的说法!~ 有能力是要多了了解一些底层的东西对自己是有帮助的。
1、变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
2、声明用于向程序表明变量的类型和名字,定义包括声明:当定义变量时声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型前的关键字extern。
同编译器有关,不同的编译器处理方法可能不同。
VC++
int a; 局部量,分配了单元,但没有给初值。
如果:
int main()
{
int a;
printf("%d",a); // 警告性错误
a=2;
return 0;
}
编译时得警告错误信息,说“用了未初始化的局部量”
---------------------------------------------------
如果,int a; 声明为全局量,编译器会初始化,数值为 0,无错误信息:
int a;
int main()
{
printf("%d\n",a); // 正确
a=2;
printf("%d",a);
return 0;
}
int main()
{
int a;
void *p=&a;
printf("p=%x\n",p); // 警告性错误
a=2;
printf("%d",a);
getchar();
return 0;
}
可以看出,a定义的时候已经分配了空间,经过断点调试可以看到a在没赋值之前是一个随机数,并不允许访问(包括用指针间接访问)。以上是经过VS 2005调试过的。
第一句既是声明也是定义,分配了内存空间,但是内部的值是不可预知的
可以获得&a的值