C++编程:变量与常量

一段程序的核心有两个方面:一个是要处理的信息,另一个就是处理的计算流程。计算机所处理的信息一般叫做“数据”(data)。

对计算机来说,需要明确地知道把数据存放在哪里、以及需要多大的存储空间。在机器语言和汇编语言中,我们可能需要充分了解计算机底层的存储空间,这非常麻烦;而在C++程序中,我们可以通过“声明变量”的方式来实现这些。

变量和常量

为了区分不同的数据,在程序中一般会给它们起个唯一的名字,这就是所谓的“变量”。在C++中,“变量”其实就是记录了计算机内存中的一个位置标签,可以表示存放的数据对象。

 

 

1. 变量的声明和赋值

想要使用变量,必须先做“声明”,也就是告诉计算机要用到的数据叫什么名字,同时还要指明保存数据所需要的空间大小。比如:

int a;

这里包含两个信息:一个是变量的名字,叫做“a”,它对应着计算机内存中的一个位置;另一个是变量占据的空间大小,这是通过前面的“int”来指明的,表示我们需要足够的空间来存放一个“整数类型”(integer)数据。

所以变量声明的标准语法可以写成:

数据类型 变量名;

变量名也可以有多个,用逗号分隔就可以。

在C++中,可以处理各种不同类型的数据,这里的int就是最基本的一种“数据类型”(data type),表示一般的整数。

当然,如果我们直接在代码中声明一个变量,然后打印输出的话就会报错,因为这个变量没有被“初始化”。也就是说,a这个变量现在可以表示内存中一个位置了,但是里面的数据是什么?这就需要让a有一个“初始值”:

int a = 1;

这个操作叫做“赋值”。需要说明的是,这里等号“=”表示的是赋值操作,并不是数学上的“等于”。换句话说,我们还可以继续给a赋别的值:

int a = 1;

a = 2;

现在a的值就是2了。a的值可以改变,所以它叫做“变量”。

扩展知识:

C++是一种静态类型(statically typed)语言,需要在编译阶段做类型检查(type checking)。也就是说所有变量在创建的时候必须指明类型,而且之后不能更改。对于复杂的大型程序来说,这种方式更有助于提前发现问题、提高运行效率。

代码如下:

#include<iostream>

using namespace std;

int main()

{

int a = 1;

cout << "a = " << a << endl;

a = 2;

cout << "现在 a = " << a << endl;

cin.get();

}

要运行的话,可以右键项目名 -> 设为启动项目,或者右键解决方案 -> 设置启动项目。

注意,如果不给初始值,后面再赋值、再使用也是合法的;但一般不能不赋值、直接使用。因为在函数中定义的变量不被初始化,而在函数外部定义的变量会被默认初始化为0值。

2. 标识符

每个变量都有一个名字,就是所谓的“变量名”。在C++中,变量、函数、类都可以有自己专门的名字,这些名字被叫做“标识符”。

标识符由字母、数字和下划线组成;不能以数字开头;标识符是大小写敏感的,长度不限。

所以下面的变量名都是合法而且不同的:

int b, B, B2, a1_B2;

此外,C++中还对变量命名有一些要求和约定俗成的规范:

l 不能使用C++关键字;

l 不能用连续两个下划线开头,也不能以下划线加大写字母开头,这些被C++保留给标准库使用;

l 函数体外的标识符,不能以下划线开头;

l 要尽量有实际意义(不要定义a、b,而要定义name、age);

l 变量名一般使用小写字母;

l 自定义类名一般以大写字母开头;

l 如果包含多个单词,一般用下划线分隔,或者将后面的单词首字母大写;

所谓的“关键字”,就是C++保留的一些单词,供语言本身的语法使用。包括:

 

以及C++中使用的一些运算操作符的替代名:

 

3.作用域

变量有了名字,那只要用这个名字就可以指代对应的数据。但是如果出现“重名”怎么办呢?

在C++中,有“作用域”(scope)的概念,就是指程序中的某一段、某一部分。一般作用域都是以花括号{}作为分隔的,就像之前我们看到的函数体那样。

同一个名字在不同的作用域中,可以指代不同的实体(变量、函数、类等等)。

定义在所有花括号外的名字具有“全局作用域”(global scope),而在某个花括号内定义的名字具有“块作用域”。一般把具有全局作用域的变量叫做“全局变量”,具有块作用域的变量叫做“局部变量”。

测试代码如下:

#include<iostream>

using namespace std;

// 全局作用域,全局变量

int number = 0;

int main()

{

// 块作用域,局部变量

int number = 1;

// 访问局部变量

cout << "number = " << number << endl;

// 访问全局变量

cout << "number = " << ::number << endl;

cin.get();

}

如果在嵌套作用域里出现重名,一般范围更小的局部变量会覆盖全局变量。如果要特意访问全局变量,需要加上双冒号:: ,指明是默认命名空间。

4. 常量

用变量可以灵活地保存数据、访问数据。不过有的时候,我们希望保存的数据不能更改,这种特殊的变量就被叫做“常量”。在C++中,有两种方式可以定义常量:

(1)使用符号常量

这种方式是在文件头用 #define 来定义常量,也叫作“宏定义”。

#define ZERO 0

跟#include一样,井号“#”开头的语句都是“预处理语句”,在编译之前,预处理器会查找程序中所有的“ZERO”,并把它替换成0。这种宏定义的方式是保留的C语言特性,在C++中一般不推荐。

(2)使用const限定符

这种方式跟定义一个变量是一样的,只需要在变量的数据类型前再加上一个const关键字,这被称为“限定符”。

// 定义常量

const int Zero = 0;

// 不能修改常量值

//Zero = 10;

const修饰的对象一旦创建就不能改变,所以必须初始化。

跟使用 #define定义宏常量相比,const定义的常量有详细的数据类型,而且会在编译阶段进行安全检查,在运行时才完成替换,所以会更加安全和方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值