C++基础---变量

1. 变量

1.1 变量的定义

  • 变量:值可以改变的量
  • 变量:存储信息的地方,是内存中的地址,在这个地址中可以进行数据的存储和读取;
    注:变量提供一个具名的、可供程序操作的存储空间。C++中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围,以及变量能参与的运算。

1.2 变量的命名规则

  • 名称中只能使用数字、字母、下划线、大小写字母代表不同字符;
  • 名称的第一个字符不能为数字,可以为下划线或字母;
  • 在相同作用域不能声明两个变量名相同的变量;
  • 不能使用C++关键字用作名称;
  • 变量名的长度不得超过255个字符;

1.3 变量的初始化与赋值的区别

  • 初始化:赋值操作是与定义变量同步执行的,初始化的含义是创建变量时赋予其一个初始值,如:
    int a = 1;
  • 赋值:赋值操作是在定义变量之后执行的,赋值的含义是把变量的当前值擦除,而以一个新值来替代,如:
    int a;
    a = 1;
    a = 2;

1.4 变量的默认初始化

  • 如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。
    (1)定义于任何函数体之外的变量被初始化为0
    (2)定义在函数体内部的内置类型变量将不被初始化,一个为被初始化的内置类型变量的值是未定义的,如果试图拷贝或以其他形式方位此类值将引发错误,类的对象如果没有显式地初始化,则其值由类确定;
  • 错误代码示例:函数体内部的内置类型int变量,若未被初始化,则该值是未定义的。

    
    #include <iostream>
    
    
    #include <string>
    
    using namespace std;
    int global_int;//函数体外的内置类型int变量,被默认初始化
    int main()
    {  
        int local_int;//函数体内部的内置类型int变量,未被初始化
        string local_string;//类的对象未被初始化,其值由类确定
        cout<<"global_int = "<<global_int<<endl;
        cout<<"local_int = "  <<local_int<<endl;
        cout<<"local_string = "<<"\""<<local_string<<"\""<<endl;
        system("pause");
        return 0;
    }
    =>编译警告:warning C4700: 使用了未初始化的局部变量“local_int”
      输出global_int = 0之后
      运行程序崩溃报错:Run-Time Check Failure #3 - The variable 'local_int' is being used without being initialized.
  • 正确代码示例:初始化函数体内部的内置类型int变量,才是正确的处理。

    
    #include <iostream>
    
    
    #include <string>
    
    using namespace std;
    int global_int;//函数体外的内置类型int变量,被默认初始化
    int main()
    {  
        int local_int = 0;//初始化函数体内部的内置类型int变量
        string local_string;//类的对象未被初始化,其值由类确定
        cout<<"global_int = "<<global_int<<endl;
        cout<<"local_int = "<<local_int<<endl;
        cout<<"local_string = "<<"\""<<local_string<<"\""<<endl;
        system("pause");
        return 0;
    }
    =>global_int = 0
      local_int = 0
      local_string = ""

    注:建议初始化每一个内置类型的变量。未初始化的变量含有一个不确定的值,使用未初始化变量的值是一种错误的编程行为并且很难调试。

1.5 变量的声明和定义

  • 声明:使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明;
  • 定义:负责创建与名字关联的实体;
  • 声明变量:仅规定了变量的类型和名字。如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量

    (1)extern int i; //声明i,而非定义i
    (2)int j; //声明j,并定义j
  • 定义变量:规定了变量的类型和名字,还申请存储空间,也可能会为变量赋一个初始值。任何包含了显示初始化的声明即成为定义;

    (1)extern int i = 0; //声明i,并定义i
    (2)int j = 0; //声明j,并定义j
    (3)int j; //声明j,并定义j

    注:变量能且只能被定义一次,但是可以被多次声明。如果要在多个文件中使用同一个变量,就必须将声明和定义分离,此时,变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝不能重复定义。

1.6 变量的定义与赋值

  • 定义变量:定义了变量后,系统便为这个变量名分配一个内存地址,这样当我们为该变量赋值的时候,数值便会通过这个地址写入到内存中,而当程序需要取变量的值时,可以通过这个地址或变量名读数据
  • 赋值,存储到计算机内存中:可以看作是一系列排列整齐的小文件柜,每个文件柜有许多排成一列的小格子组成,每个格子都编了号,这些编号就是内存地址,变量一般放置在一个或多个格子内,每个格子都可以存储一个值。每个格子代表1个字节,如果定义的变量类型是int,那么它需要4个字节的空间,也就是4个格子。变量名是贴在这些文件柜上的一个标签,用户可以通过变量名,无需知道变量的具体地址就可方便地查找到变量
    注:
    (1)当我们定义了一个变量时,必须告诉编译器该变量是什么类型(整型、字符型、其他类型),编译器将根据定义的类型自动为变量预留空间,然后做好放置该种类型的值的准备。
    (2)RAM:随机存取存储器,即内存。

1.7 变量名的作用域

  • 作用域:是程序的一部分,在其中名字有其特定的含义。C++中大多数作用域都以花括号分隔。

    
    #include <iostream>
    
    
    #include <string>
    
    using namespace std;
    int reused_int = 26;
    int main()
    {  
        int unique_int = 0;
        cout<<"reused_int = "<<reused_int<<"\t"<<"unique_int = "<<unique_int<<endl;
        int reused_int = 0;//定义一个同名的局部变量
        cout<<"reused_int = "<<reused_int<<"\t"<<"unique_int = "<<unique_int<<endl;
        cout<<"::reused_int = "<<::reused_int<<"\t"<<"unique_int = "<<unique_int<<endl;
        system("pause");
        return 0;
    }
    =>reused_int = 26 unique_int = 0
      reused_int = 0  unique_int = 0
      ::reused_int = 26 unique_int = 0

    注:如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。


参考文献:
[1]《C++全方位学习》范磊——第四章
[2]《C++程序设计教程(第二版)》钱能——第二章
[3]《C++Primer(中文版)》王刚 杨巨峰——第二章
[4] 百度搜索关键字:C++变量、变量的命名规则、变量的初始化与赋值、变量的默认初始值、变量的声明和定义、变量与内存、变量名的作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值