当前位置: 首页 > news >正文

c++语言常量,C++常量(constant)

在程序执行过程中,其值不能改变的量称为常量(Constant)。普通常量的类型是根据数据的书写形式来决定的。如 100 是整型常量,0.5 是实型常量,'q' 是字符型常量,"qianfeng" 是字符串常量。

1. 整型常量

在 C++ 中,使用的整型常量可以用八进制、十进制和十六进制 3 种方式表示,具体如下所示:

十进制整型常量是最常用的一种表示形式,如 321、-123。

八进制整型常量以 0 开头作为前缀,其数码取值为 0~7,如 025、-066。

十六进制整型常量以 0x 或 0X 开头作为前缀,其数码取值为 0~9、A~F 或 a~f,如 0xffff、-0X15。

整型常量在表示时,除了用前缀表示进制外,有时还需要用到后缀表示 long、unsigned 修饰符。当表示长整型常数时,需要在该数的后面加上 L 或 l,如 2345L;当表示无符号整型常数时,需要在该数的后面加上 U 或 u,如 4567U。

2. 实型常量

实型常量又称浮点型常量,它由整数部分和小数部分组成,其表示形式有以下两种形式:

小数表示形式,它由数字和小数点组成,不可省略小数点,但可以省略整数部分或小数部分数字,如 1.、.21。

指数表示形式,它由小数表示法后加 e(或 E )和指数组成,指数部分可正可负,但必须是整数,并且 e 前边必须有数字,如 1.23e-5、.23e6。

实型常量分单精度、双精度和长双精度 3 类,它们用后缀加以区分,不加后缀的为双精度浮点型常量,如 2.12;加后缀 F 或 f 的为单精度浮点型常量,如 2.12f;加后缀 L 或 l 的为长双精度浮点型常量,如 0.56e7L。

3. 字符型常量

用一对单引号括起来表示的形式就是字符型常量。在内存中,字符数据以 ASCII 码的形式存储,在一定范围内可以与整数相互赋值,但含义有所不同。ASCII 码是一种给字符编码的国际标准,它以整数表示字符,比如十进制数 65,表示字符 'A'。此处注意数字与字符的区别,如 4 与 '4' 是不同的,4 是整数,'4' 是字符,对应的 ASCII 码值为 52。

在 C++ 中,有些特殊字符用转义字符表示,转义字符以反斜杠“\”开头,后跟若干个字符。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符,表 1 列出了常用的特殊字符。

表 1:常用的转义字符及含义

转义字符

含义

ASCII

\0

空字符

0

\n

回车换行

10

\t

横向跳到下一制表位置

9

\b

退格

8

\r

回车

13

\f

换页

12

\\

反斜杠符

92

\'

单引号符

39

\”

双引号符

34

\a

鸣铃

7

\ddd

1〜3 位八进制数所代表的字符

\xhh

1〜2 位十六进制数所代表的字符

在表 1 中,'\ddd' 和 '\xhh' 都是用 ASCII 码表示一个字符,如 '\101' 和 '\x41' 都是表示字符 'A'。转义字符在输出中有许多应用,如想让计算机的喇叭发出响声,可以使用下面的语句。

cout << '\a';

如果需要在屏幕上输出以下内容:

小 C 对小 A 说:"学 C、C++ 语言,C语言中文网是最佳之选"。

不能使用以下方法:

cout <

因为双引号在C++中是有特殊作用的,上述写法会使编译器产生错误,正确的语句如下所示:

cout <

4. 字符串常量

字符串常量是由一对双引号括起来的字符序列。被括起来的字符序列可以是一个字符,也可以是多个字符,还可以没有字符。如"q"、"qian"、""。字符串常量都有一个结束符,用来标识字符串的结束,该结束符是 '\0',即 ASCII 码值为 0 的空字符。

对于初学者,经常混淆字符与字符串的概念,它们是不同的量,两者区别如下:

字符用单引号括起来,字符串用双引号括起来;

字符与字符串占用的内存空间不同,字符只占用一个字节的空间,而字符串占用的内存字节数等于双引号中的字符个数加1,如字符 'q' 和字符串"q"在内存中的情况是不同的,字符 'q' 在内存中占一个字节,而字符串"q"在内存中占两个字节,如图 1 所示。

bb6991f047ece21d4aa74ddfc680f74d.png

图 1:字符'q'与字符串"q"在内存中的表示

5. 符号常量

有一种特殊的常量是用标识符来表示的,称为符号常量。符号常量主要用于帮助记忆和提高程序的可读性与维护性。例如,程序中经常会用到圆周率,假设为 3.14,如果程序想提高圆周率的精度到 3.141 592 65,那么它在程序中出现的所有地方都需要做修改,大大降低了程序的维护性。

这时如果用 PI 表示圆周率,每次使用时都写 PI,那么在需要修改PI的精度时,只需要修改 PI 的初值就可以了。在 C++ 中,为了保持与 C 语言的兼容,允许程序用编译预处理指令 #define 来定义一个符号常量,上面的圆周率可以通过如下定义:

#define PI 3.14159265

这条指令的格式是 #define 后跟一个标识符和一串字符,中间用空格隔开。由于它不是 C++ 语句,因此此行没有分号。在程序编译时,编译器首先将程序中的 PI 用 3.14159265 来替换,然后再进行代码编译。标识符后面的内容实际上是一个字符串,编译器本身不会对其进行任何语法检查,仅仅是在程序中将标识符简单替换为字符串,因此,有时会带来意想不到的错误。

6. const常量

在定义变量时,可以使用 const 关键字来修饰,这样的变量是只读的,即在程序中不能对其修改,只能读取。由于不可修改,因而它是一个符号常量,且在定义时必须进行初始化。需要说明的是,通常将符号常量中的标识符写成大写字母易于与其他标识符区分。用 const 关键字定义符号常量的格式如下:

const 数据类型 常量名=初值表达式;

上面的圆周率可以通过如下定义:

const double PI=3.14159265;

const 还可以放在数据类型名后,具体示例如下:

double const PI=3.14159265;

注意下面的语句是错误的:

const double PI; //PI的值无法确定

PI = 3.14159265; //常量值不能修改

接下来演示通过 const 关键字定义符号常量,如例 1 所示。

【例 1】

#include

using namespace std;

const double PI = 3.14159265; //定义符号常量 PI

int main()

{

double area, r = 10.0;

area = PI * r * r; //使用符号常量 PI

cout<< " area = " << area << endl;

return 0;

}

程序执行结果为:

area = 314.159

在例 1 中,第 3 行通过 const 关键字定义一个符号常量 PI 表示圆周率。第 7 行中使用圆周率就可以用 PI 来代替。

相关文章:

  • 64平台的c语言int类型值比32平台大,C语言数据类型32位和64位不同
  • c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎
  • 得到 android组件,android 获取HOME组件的Activity信息
  • android studio视频路径,Android studio相关设置及实现存在于工程目录中的视频播放...
  • android wear 1.6,玩的就是情怀 外国网友将CS 1.6移植到了Android Wear上
  • ability鸿蒙,Day8 鸿蒙,一个Ability全家桶究竟包括了什么(一)
  • Android网页文字进度,Android webview 进度显示
  • android仿qq侧滑删除,Android仿QQ微信侧滑删除效果
  • html 重置样式表,CSS 浏览器样式重置终结版
  • 压缩html源文件,js代码压缩还原详解
  • html5随机选取文本框,HTML5交互式电子邮件(带输入框和选择框)
  • html格子切换效果图,(HTML)关于格子流布局方案可以如此设计
  • android密码设成星号,将EditText密码掩码字符更改为星号(*)
  • 江西赣州信丰2021高考成绩查询,2021上半年江西信丰县教资面试成绩查询入口
  • 计算机应用bsp什么意思,bsp是什么
  • Apache的80端口被占用以及访问时报错403
  • C# 免费离线人脸识别 2.0 Demo
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Web设计流程优化:网页效果图设计新思路
  • 动态魔术使用DBMS_SQL
  • 构建工具 - 收藏集 - 掘金
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端知识点整理(待续)
  • 深度解析利用ES6进行Promise封装总结
  • #### go map 底层结构 ####
  • #Java第九次作业--输入输出流和文件操作
  • #Lua:Lua调用C++生成的DLL库
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (10)ATF MMU转换表
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (5)STL算法之复制
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (第61天)多租户架构(CDB/PDB)
  • (九十四)函数和二维数组
  • (四)Linux Shell编程——输入输出重定向
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • **python多态
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net refrector
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET6实现破解Modbus poll点表配置文件
  • /etc/fstab和/etc/mtab的区别
  • @font-face 用字体画图标
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • []C/C++读取串口接收到的数据程序
  • [Android]使用Android打包Unity工程
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项