声明变量
所谓声明有两种含义:(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 |