变量
变量提供一个具名的,可供程序操作的存储空间。 C++中的每个变量都有其数据类型。 数据类型决定着变量的所占内存空间的大小、存储值得范围、能参与的运算。
变量定义
int a = 0;//首先是类型说明符(int),随后是变量名,最后是初始化(赋予一个初值)
//也可以连续定义变量,注意变量之间是逗号
int a = 0, b = 1;
对于初始化,C++的规定比较特殊,说明如下。
``
int c = 1;//用等于号初始化
c = 2;//先把原来的1擦除,赋值2
++初始化不是赋值,初始化是创建变量时赋予它一个初始值;赋值是把变量当前的值擦除,以一个新的值代替。++ 可能你现在觉得没什么区别,以后就会知道了。
除了上面使用的等于号初始化,还有两种初始化要了解。
列表初始化
int d{0}; //等价于int d = 0, 也等价于int d(0),这样初始化感觉好装逼啊。
使用花括号{}来初始化有一个很6的地方(当它跟类型转换混一起的时候),它不允许你丢失信息,听不懂的话下面举例说明:
double pi = 3.14;
int p1{pi}, p2 = {pi};//错误:列表初始化不允许损失信息
int p3(pi), p4 = pi;//正确:不同类型相互转换,且确实丢失了部分信息
默认初始化
int a;
程序员没有对a明确的初始化,则编译器默认初始化其为0,不同类型的变量默认初始化的值也不一样,那我们要不要去记住哪些变量类型对应的默认初始化值是多少呢?不用记,最好的办法就是我们不要默认初始化,每次定义一个变量,就赋给它一个初值。
变量声明和定义的关系
为了支持分离式编译(暂时可以理解为程序可以拆分为多个文件,然后一起编译),C++语言将声明和定义区分开:
- 声明: 使得名字为程序所知,
- 定义: 负责创建与名字关联的实体,变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义,但是可以声明多次。
extern int i; //声明i,声明一个变量而非定义它就在它前面加上关键字extern,且不要初始化
int j; //声明并定义j
extern int k = 0;
//定义k,因为赋予了初值,所以等价于int k = 0;
//但是你在函数体内部不能这么干,包括main函数,会报错
//所以,还是老老实实用前面两种方式吧
如果要在多个文件中使用同一个变量,就必须将声明和定义分离。变量的定义只能出现在一个文件中,其他用到该变量的文件必须对其声明,不能重复定义。
C++是一种静态类型语言,在编译阶段检查类型。
变量命名规范很重要
- 标识符(例如变量名)要能体现实际含义
- 变量名一般用小写字母,如index,不要使用Index或INDEX
- 用户自定义的类名一般以大写字母开头,如Bookstore
- 如果标识符由多个单词组成,单词间应该有区分,如student_boy或studetBoy,不要使用studentboy。 以上的规范都是为了代码的可读性。对于命名规范来说,若能坚持,必将有效。
名字的作用域
用大括号来区分,话不多说,直接上代码。
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a=5;
{
int b=7;
}
cout<<b<<endl;//会报错,b的作用域只在定义的那个{}中,出了作用域就会报错。
return 0;
}
还有一种情况要注意,可以重复定义,直接上代码。
#include <iostream>
using namespace std;
int main()
{
int a = 0;
{
int a = 1;
cout << a;//输出1,外面的全局a被覆盖了
}
cout << a << endl;//输出0,是全局变量a,局部定义的a出了作用域,失效了。
return 0;
}
关于我自己
-
一个正派但不正经的程序员
-
18年计算机专业硕士毕业生,腾讯SNG部门实习生,现加盟快手科技 ,后端研发工程师一枚
-
喜欢技术,喜欢互联网
-
民遥控 ,赵雷、陈粒、宋冬野
-
公众号:编程美学,时不时写篇文章,偶尔数羊,其实说到底,只是想和你聊聊