数据类型
学习一门编程语言,首先要掌握它的数据类型。不同的数据类型占用的内存空间不一样,合理定义数据类型可以优化程序的运行。
1. 第一个C++程序
先来看一个简单的程序示例,经典的“Hello World!”。
#include<iostream> // 包含iostream.h的头文件
using namespace std; // 使用std命名空间
int main() { // 主函数main入口
cout << "Hello World!" << endl; // 输出语句 Hello World!
return 0;
}
在这个简单的程序中,出现了头文件、命名空间、主函数、输出语句、字符串常量、注释等概念,下面来一起认识一下。
1.1 #include 头文件
C++程序中,带‘#’号的语句称为预编译命令,该命令会在程序编译之前进行。include
的含义是“包含”和“引用”,#include
命令则为包含头文件命令,表示本程序将嵌入指定的头文件。
所谓头文件,指的是程序中用于声明函数,变量、宏等的文件,通常以.h
结尾。使用头文件(包括系统头文件和自定义头文件)可以方面地引用已经写好的代码,提高代码的复用性和可维护性,同时降低代码的耦合度,使代码更加模块化。
因此第一行代码“#include<iostream>”表示包含C++标准输入输出流头文件 iostream.h,也就是说,程序编译时会在此将iostream.h头文件中的内容展开
1.2 命名空间(namespace)
一个中大型的软件往往有多名程序员开发,会使用大量的常量、变量、函数、结构体、枚举、类等,因此不可避免地会出现命名冲突的问题。工程越大,命名互相冲突的可能性就越大。为了方便的解决这个问题,C++引入了 命名空间 的概念。在不同的命名空间里,同名变量放在一起编译不会出现问题。
因此第二行代码 using namespace std; 表示使用C++标准库定义的 std 命名空间。
1.3 主函数 main()
main() 函数又称为主函数,是C++程序的执行入口。程序将从 main() 函数的第一行开始执行,主函数执行结束,整个程序也就执行结束了。其中,main为函数名“()”里可以放置参数。
int main()是函数的函数头,表示main()函数将返回一个整数的数据类型结果;大括号 {} 中的内中是需要执行的函数体。函数体中,各行代码将按照先后顺序依次执行,从上到下依次执行。
1.4 输出流语句
“cout << "Hello World!"”,表示通过数据输出流,输出英文“Hello World!”。其中双引号代表该语句是字符串常量,cout 表示输出流,<< 表示将字符串传入到输出流中。
注意
C语言中,使用scanf()、printf()函数进行数据的输入和输出操作。C++兼容C语言。因此这两个格式化输入和输出函数在C++中仍然可以使用。但是C++提供了一套全新的、更容易使用的输入输出库, 即使用 cout << 输出,cin >> 输入。
1.5 注释
代码中使用了多处“//”注释,对本行代码进行解释说明。编译器不会对注释部分进行编译。C++程序中有两种注释方法:单行注释 //, 多行注释 /* */。
2. 关键字和标识符
关键字又称保留字,是C++中规定具有特殊意义的字符串,用户定义的常量、变量、函数等名称不能与保留字相同,否则会出错。
asm | auto | break | case | catch | char | class | const | continue |
---|---|---|---|---|---|---|---|---|
default | delete | do | double | elese | enum | extern | float | for |
friend | goto | if | inline | int | long | new | operator | overload |
private | protected | public | register | return | short | signed | sizeof | static |
struct | switch | this | template | throw | try | typedef | union | unsigned |
virtual | void | volatile | while |
提示
这些关键字(保留字)不需要背诵,在开发环境编写代码中,关键字会以特殊的颜色显示。在后续学习中,会逐渐熟悉这些关键字的用法,不需要死记硬背
标识符:是对C++程序中变量、常量、语句标号以及用户自定义函数等名称进行标识的符号。其名称规则如下:
- 标识符必须以字母、数字以及下划线组成,且不能以数字开头
- C++大小写敏感,因此大写和小写英文相同的英文字母代表不同的标识符
- 标识符不能是关键字
- 标识符应该体现功能含义,便于理解(推荐但不强制)
3. 基本数据类型
C++包括整型、浮点型、字符型、布尔型等基本数据类型,数组、结构体、共同体等构造数据类型,指针类型,以及用户自定义数据类型。C++能够实现复杂的数据结构,还可以定义类,实现面向对象编程。
基本数据类型:
整数类型:短整型(short)、整型(int)、长整型(long)。
实数类型(浮点数类型):单精度(float)、双精度(double)、长双精度(long long)。
字符类型:char。
布尔类型:bool。
4. 常量
程序运行的过程中,其值不能改变的量为常量。常量包含整型常量、浮点型常量、字符常量、字符串常量等。
小栗子:
#include<iostream>
using namespace std;
int main() {
cout << 2025 << endl; // 输出整数
cout << 3.14 << endl; // 输出小数
cout << 'a' << endl; // 输出字符
cout << "Hello World!" << endl; // 输出字符串
return 0;
}
4.1 整型常量
整型常量就是整型常数(没有小数部分),如123、-7、0等。编写代码时,可将整型常量表示为十进制、八进制和十六进制三种表示方式。
- 十进制:日常见到的整数都是十进制。十进制数使用0-9来表示所有数,递进关系为逢十进一,除了0本身之外,其他十进制不能以0开头
- 八进制:使用0-7表示所有数,递进关系是逢八进一。八进制常量前要加上0作为前缀,如0123、0432等
- 十六进制:使用0-9和字母a-f或(A-F)来表示所有数,递进关系为逢十六进一。十六进制常量前要加上0x或0X作为前缀,如0x123、0X3b4a等
4.1 浮点型常量
浮点型(又称为实型)常量就是我们常见的小数,只能采用十进制形式表示。表现形式有两种小数表示和指数表示。
1、小数表示法
小数表示法由整数部分和小数部分组成,中间用小数点分割。例如,0.0、2.25、-0.002等都是合法的实型常量。
另外整数部分和小数部分可以省略一处,例如,.2表示小数0.2,2.表示小数2.0。
2、指数表示法
指数表示又称科学计数法,指数部分以e或者E开始,后面跟整数。
1.2e20表示 1.2 X 10^20
提示
在字母e(或E)之前的小数部分中,小数点左边应有且只有一位非零的数字,成为规范化的指数形式。
4.2 字符常量
使用一对单引号括起来的字符就是字符常量,如 'a'、'A'、'?'等。编译代码时,编译器会根据ASCII码表将对应字符常量转化为整型常量。其中'a'对应的是97,'A'对应的是65。
除了这些固定字符,ASCII码表中还有很多转义字符,转义字符是一类特殊的字符常量,通常以反斜杠 "\" 开头,后面跟一个或多个字符。下面是一些常用的转义字符以及对应的意义。
转义字符 | 意义 | ASCII码 | 转义字符 | 意义 | ASCII码 |
---|---|---|---|---|---|
\0 | 空字符 | 0 | \ | 反斜杠 | 93 |
\n | 换行 | 10 | \' | 单引号字符 | 39 |
\t | 水平制表 | 9 | \" | 双引号字符 | 34 |
\b | 退格 | 8 | \a | 响铃 | 7 |
\r | 回车 | 13 | \f | 换页 | 12 |
\ddd | 1~3位八进制数代表的字符 | \xhh | 1~2位十六进制数代表的字符 |
4.2 字符串常量
字符串常量是用一对双引号括起来的字符序列。例如 "Hello World!"、"Welcome to learn C++!!!"都是合法的字符串常量。其中,""表示一个空字符串,此时字符串的长度为0。
字符串常量实际上是一个字符数组,可以将字符串分割为若干个字符,字符的数量就是字符串的长度。字符串常量一般用来给字符数组变量赋值或是直接作为实参传递,为告知编译器字符串已经结束,一般再给字符串数组赋值时在字符串的末尾加上字符'\0',表示字符结束。如果不加可能会导致意想不到的错误。
提示
字符'A'和字符串"A"含义不同。内存中,字符'A'只包含一个字符:字符串"A"其实是"A\0"两个字符组成,字符串长度为2。
4.3 其他常量
除了整型、浮点型、字符型、字符串型常量外,还存在布尔常量、枚举常量和宏定义常量等。
- 布尔常量:布尔类型时表示是否、对错等真假值判断的数据类型,常用在逻辑判断中。布尔值类型只有true和false两个取值。true表示真,其值是1、false表示为假,其值是0
- 枚举常量:枚举型数据中定义的数据都是常量
- 宏定义常量:通过#define宏定义的值也是常量
💬 欢迎评论!请确保您已登录 GitHub。