声明、定义、初始化、赋值的区别

声明变量

所谓声明有两种含义:(1)这个对象名(变量名)已经和一块内存空间匹配了,下面的代码用到这个对象名(变量名)是在别的地方已经定义的。(2)这个名字被预定了,其他地方不能用它来作为对象名(变量名),比如函数声明中的参数。声明可以声明多次。

extern int a;//声明外部变量a

extern关键字:声明外部符号,表示变量或函数的定义在别的文件中,下面用到这个变量或函数是外来的,不是在本文件中定义的。

定义变量

所谓定义就是创建一个对象(变量),并为这个对象(变量)开辟一块空间,给这块空间取个名字就是我们说的对象名(变量名),这个名字就和这块空间就匹配起来了。定义对象(变量),规定了该变量在内存中的位置大小。定义只能定义一次。

int a;//定义变量a,它在内存中的地址和大小就规定好了,此时值还不确定

声明和定义的区别

定义创建了变量(对象)并且为这个变量(对象)分配了内存空间,声明没有分配内存空间。

变量初始化

所谓初始化就是在定义的同时给初值。

int a = 10;

初始化就是:定义+初值。

赋值

变量已经存在了,改变它的值而已。

int a = 10;//初始化
a = 20;//赋值

左值和右值

左值:指向内存位置的表达式被称为左值表达式,左值强调的是空间。左值可以出现在赋值号的左边或右边。

右值:指的是存储在内存中某些地址的具体数值。右值强调的是空间中的值。右值只能出现在等号的右边。右值是不能对其进行赋值的表达式。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。

int a = 20;//正确
10 = 20;//错误

局部变量和全局变量的初始值

定义局部变量时,如果不给初始值,系统不会对其初始化,默认是个随机值(垃圾值),所以我们必须自己进行初始化。定义全局变量时,如果不初始化,系统会自动对其进行初始化。

数据类型 初始化默认值
int 0
char ‘’
pointer NULL

猜你喜欢

转载自blog.csdn.net/weixin_42836316/article/details/123016427