【编程语言】变量的定义以及与extern声明的区别

变量的定义与声明的区别

 

      首先,变量的定义一定是发生在变量声明(extern)之前,变量的声明可以有多个,但是变量的定义只有一种,变量的声明影响变量的引用和作用域,而变量的定义则只是单方面的创建变量以及初始化赋值等,若变量再定义时没有初始化,则会在文件执行编译的时候随机赋值

1)变量在定义时分配内存空间,同时也可能进行赋初值

2)变量在声明时不会分配内存空间,变量的声明只是声明变量存在,可能引用其他文件中位置的声明变量,其作用是声明变量是在已定义的变量后面进行的

 

变量分为变量名和变量值

 

变量名的地址

                是在编译过程中形成的

    编译过程中,当系统发现你定义了一个变量并给它赋了初值,就会给该变量分配相应的存储空间,并把该变量的名称和存储空间的第一个字节的地址(值存储单元地址)存在一个变量名表里,由该变量的类型可以知道该变量占据存储空间的大小

    变量名是存储在栈符号表中,符号也是一个文件,而这个文件也占内存空间,在内存中是用栈来保存其中的信息,即栈空间存放的参数名

当我们使用这个变量的时候,便会到变量表里查该变量的名字,要是没有找到,表示该变量没有定义,提示相应的错误信息,要是找到了,就会知道变量在存储空间的地址了,于是就到该存储空间把变量的值取出来。

 

变量值

        值类型的相对地址

随着变量的定义,同时生成自己的存储单元,相对地址也就是自己存储单元地址,如int a ;同时在内存中创建存储单元,这些都是在内存中的栈产生的,然后赋值给的存储单元,则相对地址就是存储单元的这个地址

 

变量的使用

    当使用这个变量的时候会先通过查找变量名表查找这个变量有没有定义,如果有定义会在变量名表中根据存储单元的地址(相对地址)找到对应的存储空间,把这个值取出来。

 

变量的初始化

         在使用变量之前应该给变量赋初值,一个好的编译程序会发现那些没用被定义一个值就被使用的变量,不过变量不一定需要初始化,在函数外部定义的变量(全局变量)或者函数内部用static关键词定义的变量在没有被程序员赋初值之前已经被系统初始化为零了,这就是系统在初始化栈空间之后清BSS段的结果,如果在函数内部的auto(自动变量),你没有明确初始化变量,它们就会具有未定义的值,这个值就是存储在存储单元中的未知值,所有在使用它之前必须先确保赋初值。

 

变量的左值和右值

              值类型(右值:常量);引用类型(左值:具体数据类型,有对应的内存标识符)

      右值  就是根据相对地址计算取对应存储单元内的内容来使用,也就是对变量的使用时取其对应的存储单元里面的值(常量),最后代表的是这个存储单元里面的值,如B = A ;中的A就是进行右值操作,发生在使用变量的时候

      左值  根据相对地址,来计算取其对应存储单元来使用用来赋值给这个存储单元,如B = A ;其中B就是左值操作,显明左值表达式就是有适当的数据类型和存储空间的标识符,间接运算符还有取址运算符&等,但是&取址运算符的结果是右值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值