C++基础知识(三)—— 常量

一个常量(constant)是一个有固定值的表达式。


字(Literals)

字是用来在程序源码中表达特定的值。在前面的内容中我们已经用了很多的字来给变量赋予特定的值。例如:

a = 5;

这句代码中5就是一个字常量。

字常量(literal constant)可以被分为整数(Integer Numbers), 浮点数(Floating-Point Numbers),字符(Characters)和字符串(Strings)。

 

整数(Integer Numbers)

1776
707
-273

他们是整型常数,表示十进制整数值。注意表示整型常数时我们不需要些引号(quotes ("))或任何特殊字符。毫无疑问它是个常量:任何时候当我们在程序中写1776,我们指的就是1776这个数值。

除十进制整数另外, C++还允许使用八进制(octal numbers)和十六进制(hexadecimal numbers)的字常量(literal constants)。如果我们想要表示一个八进制数,我们必须在它前面加上一个0字符(zero character),而表示十六进制数我们需要在它前面加字符0x (zero, x)。例如以下字常量(literal constants)互相等值:

75     // 十进制 decimal
0113 // 八进制 octal
0x4b // 十六进制 hexadecimal

所有这些都表示同一个整数: 75 (seventy five) ,分别以十进制数,八进制数和十六进制数表示。

像变量一样,常量也是有数据类型的。默认的整数字常量的类型为int型。我们可以通过在后面加字母u或l来迫使它为无符号(unsigned)的类型或长整型(long)。

75         // int
75u        // unsigned int
75l        // long
75ul       // unsigned long
 

这里后缀u和l可以是大写,也可以是小写。


浮点数(Floating Point Numbers)

浮点数以小数(decimals)和/或指数幂( exponents)的形式表示。它们可以包括一个小数点,一个e字符(表示"by ten at the Xth height",这里X是后面跟的整数值) ,或两者都包括。

3.14159 // 3.14159
6.02e23 // 6.02 x 10^1023
1.6e-19 // 1.6 x 10^-19
3.0     // 3.0

以上是包含小数的以C++表示的4个有效数值。第一个是PI,第二个是Avogadro数之一,第三个是一个电子(electron)的电量(electric charge)(一个极小的数值) – 所有这些都是近似值。最后一个是浮点数字常量表示数3。

浮点数的默认数据类型为double。如果你想使用float或long double类型,可以在后面加f或l后缀,同样大小写都可以:

3.14159L   // long double
6.02e23f   // float 


字符和字符串(Characters and strings)

此外还有非数字常量,例如:

'z'
'p'
"Hello world"
"How do you do?" 

前两个表达式表示单独的字符(character),后面两个表示由若干字符组成的字符串(string) 。注意在表示单独字符的时候,我们用单引号(single quotes (')),在表示字符串或多于一个字符的时候我们用双引号(double quotes ("))。

当以常量方式表示单个字符和字符串时,必须写上引号以便把他们和可能的变量标识或保留字区分开,注意以下例子:

x
'x'

x 指一个变量名称为 x, 而'x'指字符常量'x'。

字符常量和字符串常量各有特点,例如escape codes,这些是除此之外无法在源程序中表示的特殊的字符,例如换行符 newline (\n) 或跳跃符tab (\t)。所有这些符号前面要加一个反斜杠inverted slash (\)。这里列出了这些escape codes:

\n换行符newline
\r回车carriage return
\t跳跃符tabulation
\v垂直跳跃vertical tabulation
\bbackspace
\fpage feed
\a警告alert (beep)
\'单引号single quotes (')
\"双引号double quotes (")
\?问号question (?)
\\反斜杠inverted slash (\)

例如:

'\n'
'\t' 
"Left \t Right" 
"one\ntwo\nthree" 

另外你可以数字ASCII 码表示一个字符,这种表示方式是在反斜杠(\)之后加以8进制数或十六进制数表示的ASCII 码。在第一种(八进制octal)表示中,数字必需紧跟反斜杠(例如\23\40),第二种(十六进制hexacedimal),必须在数字之前写一个x字符(例如\x20\x4A)。

如果每一行代码以反斜杠inverted slash (\)结束,字符串常量可以分多行代码表示:

"string expressed in \
two lines"

你还可以将多个被空格blankspace、跳跃符tabulator、换行符newline或其他有效空白符号分隔开的字符串常量连接在一起:

"we form" "a single" "string" "of characters"

最后如果我们想让字符串使用宽字符(wchar_t),而不是窄字符(char),可以在常量的前面加前缀L:

L"This is a wide character string"

宽字符通常用来存储非英语字符,比如中文字符,一个字符占两个字节。

布尔型常量(Boolean Literals)

布尔型只有两个有效的值:true和false,其数据类型为bool。


定义常量Defined constants (#define)

使用预处理器指令#define,你可以将那些你经常使用的常量定义为你自己取的名字而不需要借助于变量。它的格式是:

#define identifier value

例如:

#define PI 3.14159265
#define NEWLINE '\n'
#define WIDTH 100

以上定义了三个常量。一旦做了这些声明,你可以在后面的程序中使用这些常量,就像使用其它任何常量一样,例如:

circle = 2 * PI * r;
cout << NEWLINE;

实际上编译器在遇到#define指令的时候做的只是把任何出现这些 常量名(在前面的例子中为PI, NEWLINE或WIDTH)的地方替换成他们被定义为的代码(分别为3.14159265, '\n'和100)。因此,由#define定义的常量被称为宏常量macro constants。

#define 指令不是代码语句,它是预处理器指令,因此指令行末尾不需要加分号semicolon (;) 。如果你在宏定义行末尾加了分号(;) ,当预处理器在程序中做常量替换的时候,分号也会被加到被替换的行中,这样可能导致错误。


声明常量declared constants (const)

通过使用const前缀,你可以定义指定类型的常量,就像定义一个变量一样:

const int width = 100;
const char tab = '\t';
const zip = 12440;

如果没有指定类型(如上面最后例子中最后一行),编译器会假设常量为整型int。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android获取本机号码及运营商

import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log;public class SIMCardInfo {/*** TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家 以及某些类型的用户访问信息…

C++基础知识(四)—— 操作符/运算符

前面已经学习了变量和常量&#xff0c;我们可以开始对它们进行操作&#xff0c;这就要用到C的操作符。有些语言&#xff0c;很多操作符都是一些关键字&#xff0c; 比如add, equals等等。C的操作符主要是由符号组成的。这些符号不在字母表中&#xff0c;但是在所有键盘上都可以…

Java中如何克隆集合——ArrayList和HashSet深拷贝

2019独角兽企业重金招聘Python工程师标准>>> 编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List&#xff0c;Set&#xff0c;ArrayList&#xff0c;HashSet或者其他集合实现的方法。需要记住的是&#xff0c;Java集合的拷贝构造函数只提供浅拷贝而不是深拷…

C++基础知识(五)—— 基本输入输出

控制台(console)是电脑的最基本交互接口&#xff0c;通常包括键盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备&#xff0c;而 屏幕为标准输出设备。 在C的iostream函数库中&#xff0c;一个程序的标准输入输出操作依靠两种数据流&#xff1a;cin 给输入使用和cout给输出…

PHP之preg_replace()与ereg_replace()正则匹配比较讲解

<?php//preg_replace()和ereg_replace()函数的使用的比较// -------preg_replace()--------------------------//1.进行字符串的查找的替换 $str "daoyu shi ge hao hai zi 5555"; $pattern "/\s/"; //如果将…

C++ 控制结构和函数(一) —— 控制结构

一个程序的语句往往并不仅限于线性顺序结构。在程序的执行过程中它可能被分成两支执行&#xff0c;可能重复某些语句&#xff0c;也可能根据一些判断结果而执行不同的语句。因此C 提供一些控制结构语句 (control structures) 来实现这些执行顺序。 为了介绍程序的执行顺序&…

如何安装Favicon

如何安装Favicon favicon.ico图像放在根目录下(也可以是其他目录)在页面源文件的<head></head>标签之间插入 <link rel"shortcut icon" href" /favicon.ico" /> 最后形成: <head> ... <link rel"shortcut icon" hre…

C++ 控制结构和函数(二) —— 函数I(Functions I)

通过使用函数(functions)我们可以把我们的程序以更模块化的形式组织起来&#xff0c;从而利用C所能提供的所有结构化编程的潜力。 一个函数(function)是一个可以从程序其它地方调用执行的语句块。以下是它的格式&#xff1a; type name ( argument1, argument2, ...) statement…

条件概率的几何解释 由定义计算条件概率 由条件概率公式计算条件概率

A发生&#xff0c;则去掉圈A以外的区域&#xff0c;形成新的样本空间 &#xff08;如果是概率质量函数&#xff0c;则称为归一化&#xff09;然后在A发生的前提下&#xff0c;B的概率为 圈A与圈B的公共区域/圈A 这就是条件概率的几何解释~~~ 甲乙两人各抛一个骰子&#xff0c…

C++ 控制结构和函数(三)—— 函数II(Functions II)

参数按数值传递和按地址传递(Arguments passed by value and by reference) 到目前为止&#xff0c;我们看到的所有函数中&#xff0c;传递到函数中的参数全部是按数值传递的(by value)。也就是说&#xff0c;当我们调用一个带有参数的函数时&#xff0c;我们传递到函数中的是变…

oracle XMLType字段使用方法

2019独角兽企业重金招聘Python工程师标准>>> 刚才研究了一下XMLType字段使用方法 &#xff0c;现在给大家介绍一下。 主要是新增、查询、修改XMLType字段 表结构&#xff1a; 建表sql&#xff1a; -- Create table create table T_BOOK ( ID VARCHAR2(32)…

C++ 高级数据类型(一)—— 数组

数组(Arrays) 是在内存中连续存储的一组同种数据类型的元素&#xff08;变量&#xff09;&#xff0c;每一数组有一个唯一名称&#xff0c;通过在名称后面加索引&#xff08;index&#xff09;的方式可以引用它的每一个元素。 也就是说&#xff0c;例如我们有5个整型数值需要存…

DataUml Design 介绍8-DataUML 1.2版本正式发布

为什么80%的码农都做不了架构师&#xff1f;>>> DataUML 1.2版本在软件架构上有了很大的变化&#xff0c;目前DataUML支持Access、SQLite、MY SQL 、ORACLE、MS SERVER2000、MS SERVER2005、MS SERVER2008数据库。 下载 主要更新内容如下&#xff1a;  1、支持S…

C++ 高级数据类型(二)—— 字符序列

前面基础知识部分讲C变量类型的时候&#xff0c;我们已经提到过C的标准函数库提供了一个string类来支持对字符串的操作。然而&#xff0c;字符串实际就是一串连续的字符序列&#xff0c;所以我们也可以用简单的字符数组来表示它。 例如&#xff0c;下面这个数组: char jenny …

转: seajs手册与文档之 -- 模块标识

目录 模块标识 相对标识顶级标识普通路径文件后缀的提示模块标识 模块标识是一个字符串&#xff0c;用来标识模块。在 require、 require.async 等加载函数中&#xff0c;第一个参数都是模块标识。define 函数的 dependencies 参数也是由模块标识组成。 SeaJS 中的模块标识是 C…

C++ 高级数据类型(三)—— 指针

我们已经明白变量其实是可以由标识来存取的内存单元。但这些变量实际上是存储在内存中具体的位置上的。对我们的程序来说&#xff0c;计算机内存只是一串连续的单字节单元(1byte cell)&#xff0c;即最小数据单位&#xff0c;每一个单元有一个唯一地址。 计算机内存就好像城市中…

C++ 高级数据类型(四)—— 动态内存分配

到目前为止&#xff0c;我们的程序中我们只用了声明变量、数组和其他对象&#xff08;objects&#xff09;所必需的内存空间&#xff0c;这些内存空间的大小都在程序执行之前就已经确定了。但如果我们需要内存大小为一个变量&#xff0c;其数值只有在程序运行时 (runtime)才能确…

Linux下查看文件和文件夹大小的df和du命令(链接)

http://www.yayu.org/look.php?id162转载于:https://www.cnblogs.com/tyhmj/p/3682480.html

C++ 高级数据类型(五)—— 数据结构

一个数据结构是组合到同一定义下的一组不同类型的数据&#xff0c;各个数据类型的长度可能不同。它的形式是&#xff1a; struct model_name {type1 element1;type2 element2;type3 element3;..} object_name;这里model_name 是一个这个结构类型的模块名称。object_name 为可选…

ubuntu 手动安装mysql

申请了一台云主机&#xff0c;需要手动安装所有环境&#xff0c;今天将mysql安装过程记下。 安装mysqla. 下载不了gcc, 需要先运行apt-get updateb. cmake报错&#xff0c;每次要先删除cmakeCache.txt&#xff0c;再重新跑cmakec. apt-get install ncurses找不到对应包&#xf…