常量和变量【C/C++】

常量

常量的概念

在程序运行过程中,其值不能被改变的量称为常量。

分类

常量分为整型常量、实型常量、布尔常量、字符常量、字符串常量、字符串常量。这6种常量中,布尔常量是C++才有的,其余5种为C和C++都拥有的常量类型。

1 整型常量

如 1000,0,12345,-247 等都是整型常量。

2 实型常量

实型常量也叫浮点型常量。

(1)十进制小数形式

由数字和小数点(即,整数部分、小数点、小数部分)组成。如 0.123,0.0,12.0,111.467,-57.45 等。

(2)指数形式

使用e或E构成指数形式,以10为底。
使用格式如下:

数字1e数字2,或者,数字1E数字2

数字1:必须有。
数字2:必须为整数,正整数、负整数、零。
如 3.14e3(表示3.14 ×\times× 103),3e3(表示3 ×\times× 103),-127.78E-23(表示-127.78 ×\times× 10-23),-243e15(表示-243 ×\times× 1015),0.145E-25(表示0.145 ×\times× 10-25)。

3 布尔常量

C语言没有布尔常量。
布尔常量共有两个,它们都是标准的 C++ 关键字:

  • true 值代表真。
  • false 值代表假。
    注意:

在C语言中,
C99新增了_Bool类型,有true和false两种取值,即C99拥有布尔常量,头文件是<stdbool.h>。
<stdbool.h>头文件将_Bool定义为宏bool,即可以使用_Bool或bool定义变量,头文件还定义了true,false等宏。
1为true
0为false
将非0值赋值给_Bool变量时,变量值都为1(true)
将0值赋值给_Bool变量时,变量值为0(false)

4 字符常量

字符常量是括在英文单引号中的。

(1)普通字符

如 ‘a’,‘C’,‘7’,‘?’,‘#’,‘@’。不能写成’ab’、'12’等。
注意:单引号只是界限符,字符常量只能是一个字符,不包括单引号。
'a’和’A’是不同的字符常量。

(2)转义字符

以字符“\”开头,意思是将“\”后面的字符转换成另外的意义。如’\n’中的“n”不代表字母n而作为换行符。

5 字符串常量

字符串常量是括在英文双引号中的。如"boy","1234"等。字符串常量是双引号中的全部字符,不包括双引号本身。

可以说,以上5种常量是没有名字的不变量。
以上5种常量都是没有名字的,下面的符号常量却是有名字的。

6 符号常量

所谓符号常量,就是有名字的常量,用一个符号名称代表一个常量。
有两种简单的定义常量的方式:

(1)使用 #define 预处理器。
格式:#define name value
没有分号
(2)使用 const 关键字。
格式:const type name = value;
有分号

如:

#define PI 3.14159
const float pi = 3.14159;

int n=65;//整型变量
char cc='s';//字符变量
const char *c='z';//'z'是字符常量
c=&n;
c=&cc;
/*
* const char *c;等价于char const *c;
* 定义一个指向字符常量的指针变量,不能用指针c修改所指向的内容,即*c的值为const不能修改。
* c的值可以修改,
* c的声明并不意味着它指向的值实际上就是一个常量,只是意味着对指针c而言,这个值是常量,
* 指针c可以指向一个常量,也可以指向一个变量
*/
char ch='a';
char* const s=&ch;
/*
* char* const s=&ch;
* 定义一个指向字符的指针常量,即const指针,
* 必须定义时就初始化指针s,否则之后就不能为其赋值了,那么定义了也没有意义;
* 不能修改指针s的值,可以修改该指针指向的内容(如果内容是变量的话)
*/

定义符号常量时,尽量使用const,而少使用#define,const定义的符号常量使用起来更方便。

注意:

在C语言中:
const是C90新增的关键字。
其实使用const修饰的变量,称为常变量,可以说,常变量是有名字的不变量。
这个常变量不用和符号常量区分的那么清楚,它们的作用没什么差别,只是常变量具有符号常量的优点,而且使用更方便。

变量

变量的概念

  • 程序中经过操作可以改变的量称为变量。
  • 在程序的执行过程中,其值可以在一定范围内发生改变的量,也是存储数据信息的容器。
  • 变量代表一个有名字的、具有特定属性的存储单元。
  • 变量其实只不过是程序可操作的存储区的名称。

变量名

变量名由数字,字母(大写或小写),下划线组成,第一个字符必须是下划线或者字母。
变量名不能与c/c++语言系统所保留的关键字相同。

变量类型转换

隐式类型转换

编译系统自动完成。

强制类型转换

C的强制类型转换

一般形式:(类型名)(表达式)

int a;
float b;
(long)a;//将a转换成long型
(double)(a+b);//把a+b的值强转成double型
(double)a+b;//只把a强转成double型,再和b相加
C++的强制类型转换

两种通用格式:

(typeName)(expression) //这一格式,来自C语言
typeName(expression) //C++的新格式

C++还引入了4种强制类型转换运算符,对它们的使用要求更为严格。
这4种强制类型转换运算符为:
dynamic_cast:指针类型转换;
const_cast:改变值为const或volatile;
static_cast:可用于将值从一种数值类型转换为另一种数值类型;
reinterpret_cast:用于天生危险的类型转换。

使用格式如下:

dynamic_cast <type-name> (expression)

const_cast <type-name> (expression)

static_cast <type-name> (expression)

reinterpret_cast <type-name> (expression)

<-------------------------------use-sample---------------------------->

变量的作用域

所谓变量的作用域,就是说变量在什么范围内有效。
从变量的作用域(即从空间)的角度来观察,变量可以分为局部变量和全局变量。

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。

局部变量和全局变量

在程序中,局部变量和全局变量的名称可以相同,但是在函数内(在局部变量的作用范围内),局部变量的值会覆盖全局变量的值,即局部变量有效,而全局变量被“摒弃”,(全局变量)不起作用。

变量的生存期

所谓变量的生存期,即变量(变量值)存在的时间。
从变量的生存期(即从存在时间)的角度来观察,变量的存储方式可以分为静态存储方式和动态存储方式。

静态存储方式

静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。

动态存储方式

动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。

内存中的用户区

内存中供用户使用的存储空间(用户区)可分为3部分:
(1)程序区;
(2)静态存储区;
(3)动态存储区。

用户区
程序区
静态存储区
动态存储区
静态存储区

全局变量全部存放在静态存储区,

动态存储区

存放以下数据:
(1)函数形式参数。在调用函数时给形参分配存储空间。
(2)函数中定义的没有用static关键字声明的变量,即自动变量(auto变量)。
(3)函数调用时的现场保护和返回地址等。
以上这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间。

变量和函数都有的两个属性

这个属性是数据类型和数据的存储类别。数据类型,如整型、浮点型。存储类别指的是数据在内存中的存储方式(如静态存储和动态存储)。
根据变量的存储类别,可以知道变量的作用域和生存期。

C的存储类

C的存储类别包括四种:自动的(auto存储类)、静态的(static)、寄存器的(register)、外部的(extern)。
自动变量(auto变量)存储在内存的动态存储区。
静态局部变量(static变量)存储在内存的静态存储区。
寄存器变量(register变量)存储在CPU中的寄存器中。
extern用来扩展外部变量的作用域。

C++的存储类

C++的存储类:自动的(auto存储类)、静态的(static)、寄存器的(register)、外部的(extern)、(mutable)、(thread_local 【C++11】)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值