代码改变世界

读书笔记:C++ Primer系列(3)—— 关于变量

2013-12-18 14:23  Keiven_LY  阅读(262)  评论(0编辑  收藏  举报

题记:

       每一个变量都有特定的类型,该类型决定了变量在内存中的大小及位置、能够存储于该内存中的值的取值范围,以及可执行的操作。

3.1 初始化

      C++支持两种变量初始化形式:直接初始化赋值初始化。如:

                                          int  day=7;//赋值初始化形式

                                          int  day(7); //直接初始化形式

注意:初始化与赋值两者的区别

                                初始化:创建变量并给它赋初值;            赋值:擦除对象当前值并新值替代

针对不同的对象,初始化方式也有说法。对于内置类型来说,直接初始化与赋值初始化没有什么区别;但对于类类型对象,有些仅可以采用直接初始化的方式。这是由于类类型对象的初始化是通过定义一个或多个构造函数来控制类对象的初始化的。

基本内置类型:包括整型与浮点型,具体占用字节数由机器类型与编译器决定。

3.2 初始化规则

      当我们定义变量未进行初始化时,系统会帮助我们初始化变量。这时,系统提供什么样的值取决于变量的类型,也取决于变量定义的位置。

      对于内置类型的变量是否自动进行初始化取决于变量的位置:

  •    在函数体外定义的变量都初始化为0;
  •    在函数体内定义的内置型变量不进行初始化

3.3 声明和定义

  • 变量的定义用于为变量分配内存空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
  • 变量的声明用于向程序表明变量的类型和名字。可以通过extern关键字声明变量而不定义它。不定义变量的声明包括对象名、对象类型及类型前的extern关键字。

                      int k;//声明并定义了变量k

                      extern int k;//声明但未定义变量k(注:extern声明不是定义,在内存中也不分配空间

注:只有定义才能分配内存空间

如果声明有了初始化,可以认为进行了变量定义(即使使用了声明标记extern)。如

                      extern int day=7;//定义了一个整型变量day,分配并初始化了内存空间

注:

  1. 只有当extern声明位于函数外部时,才可以进行初始化。
  2. 已初始化的extern声明被当作定义后,随后的任何该变量的定义都是不允许的。

3.4 int char double等类型的数据所占字节数

16位编译器 下:

             char :1个字节

             char*(即指针变量): 2个字节

             short int : 2个字节

             int: 2个字节

             unsigned int : 2个字节

             float: 4个字节

             double: 8个字节

             long: 4个字节

             long long: 8个字节

             unsigned long: 4个字节

32位编译器下:

                      char :1个字节

                      char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)

                       short int : 2个字节

                      int: 4个字节

                      unsigned int : 4个字节

                      float: 4个字节 double: 8个字节

                       long: 4个字节

                      long long: 8个字节

                      unsigned long: 4个字节

64位编译器下:

        char :1个字节

        char*(即指针变量): 8个字节

        short int : 2个字节

        int: 4个字节

        unsigned int : 4个字节

        float: 4个字节

        double: 8个字节

        long: 8个字节

        long long: 8个字节

        unsigned long: 8个字节