3.1 文字常量
- 字符型char,通常用来表示单个字符和小整数
- 整型int、短整型short、长整型long
- 浮点型float、双精度double和长双精度long double
文字常量:“文字”是因为只能以它指的形式指代它,“常量”是因为它的值不能被改变。
每个文字常量都有相对应的类型,且都是不可寻址的。
整数文字常量的三种形式:十进制、八进制(前面加一个0)、十六进制(前面加0x)
默认,整型文字常量被当做是一个int型的有符号值,文字常量后加“L”,将其指定为long类型,也可以在整型文字常量后加“U”,指定它为无符号数。扩展精度用“L”表示。
科学计数法:“f”“F”“L”“l”只能用在十进制中。
宽字符:字符常量前加“L”,例如:L”a”。类型为wchar_t。
如果两个字符串或宽字符串在程序中相邻,C++会把它们连接在一起,并在最后加上一个空字符。注意:不要将一个字符串与宽字符串连接。
3.2 变量
变量和文字常量都有存储区,也有相关的数据类型,区别是变量时可寻址的。
对于一个变量,
- 它的数据值,存储在某个地址中。——右值。文字常量和变量都可以用作右值。
- 它的地址值,数据存放的内存地址。——左值,文字常量不能用作左值。
一个简单的定义指定了变量的类型和标示符,它并不提供初始值。如果一个变量是全局变量,那么系统会保证提供初始值给该变量。未初始化的对象不是没有值,而是它的值是未定义的。(与它关联的内存区含有一个随机的位串,可能是以前使用的结果)
C++初始化的两种方式:
- 使用赋值操作符
- 初始值放在标示符后的括号中,例如:int ival(20);
- 每种内置数据类型都支持一种特殊的构造函数语法,可将对象初始化为0。例如:int val=int(); double dVal = double();
3.3 指针
指针变量最好写成:string *fp ; 解引用符号挨着标识符。
当指针为0值时,表示没有指向任何对象。指针不能持有非地址值,指针不能被初始化或赋值为其他类型对象的地址值。
空(void*)类型指针,可以被任何数据指针类型的地址值赋值(函数指针不能赋值给它)。void*表示相关的值是地址,但该地址的对象类型未知,我们不能操作空类型指针所指向的对象,只能传送该地址值或将它与其他地址值做比较。
指针的算术运算符(增加或减少)
加法:针对指针的加法总是认为是数据对象的加法,而不是离散的十进制加法。例如:指针加2表示给指针持有的地址增加了该类型两个对象的长度。
3.4 字符串类型
C++提供两种字符串的表示:C风格的字符串和标准C++引入的string类型。建议使用string类。
要使用C++标准库的string类型,需要加入#include <string>
3.5 const限定修饰符(重要)
const类型限定符将一个对象转换成一个常量。因为常量在定义后就不能被修改,所以必须进行初始化。任何“试图将一个非const对象的指针指向一个常量对象”à编译错误。
const double *cptr ;
cptr是一个指向double类型的const对象指针。读为:cptr是一个指向double类型的、被定义成const的对象指针。但cptr本身不是常量,可以重新复制给cptr,但不能修改cptr所指向的对象。const对象的地址只能赋值给指向const对象的指针,但是指向const对象的指针可以被赋予一个非const对象的地址。指向const的指针常被用作函数的实参。
int errNumb = 0 ;
int *const curErr = &errNumb;
curErr是一个指向int类型对象的const指针。不能赋给curErr其他的地址值,但可以修改curErr指向的值。
3.6 引用类型
引用有时候又称为别名(alias)。
定义方式:
int iVal = 1024;
int &refVal = iVal;——refVal是一个指向iVal的引用。引用必须初始化为指向一个对象。
int *pi = &iVal;
int *&ptrVal2 = pi;——ptrVal2是一个指向int指针的引用。引用一旦已经定义,就不能再指向其他对象。引用的所有操作实际上都被应用在它所指的对象上,包括取地址符。
const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量。不允许非const引用指向需要临时对象的对象或值。
double dval = 3.14159;
// 仅对于const引用才有效
const int &ir = 1024;
const int &ir2 = dval;
const double &dr = dval + 1.0;
实际的C++程序很少使用指向独立对象的引用类型。引用类型主要被用作函数的形参和作为返回值。
3.7 布尔类型
布尔类型:true/false。当表达式需要一个算术值时,布尔对象和布尔常量都被隐式提升为int:false变成0,true变成1。
3.8 枚举类型
enum open_modes{ input = 1, output, append};
C++不支持在枚举成员之间的前后移动。在缺省情况下,第一个枚举成员被赋以0,后面的每个枚举成员依次比前面的大1。也可以显示地把一个值赋给一个枚举成员,这个值不必是唯一的。
// point2d = 2, point2w = 3, point3d = 3, point3w = 4
enum Points{ point2d = 2, point2w, point3d = 3, point3w};
枚举类型可以参与表达式运算,可以作为参数传递给函数,也可以被初始化,但只能被一个相同枚举类型的对象或者枚举成员之中的某个值初始化或赋值。
3.9 数组类型
字符数组可以用一个由逗号分开的字符文字列表初始化,文字列表用花括号阔起来,或者用一个字符串文字初始化。注意:这两种方式是不等价的,字符串常量包含一个额外的终止空字符。例如:
const char ca1[] = {‘C’, ‘+’, ‘+’};
const char ca2[] = “C++”;
一个数组不能被另外一个数组初始化,也不能被赋值给另外一个数组。而且,C++不允许声明一个引用数组(由引用组成的数组)。
3.10 vector容器类型
与string类一样,vector类是随标准C++引入的标准库的一部分。为了使用vector,必须包含#include <vector>。
两种形式:
1、数组习惯:vector<int> ivec(10);与int ivec[10]相似。访问vector元素与内置数组一致。
2、STL习惯:vector<int> ivec;定义一个空vector,再向vector中插入元素。例如:push_back()插入元素。使 用vector的begin()和end()所返回的迭代器(iterator)进行循环。iterator是标准库的类,具有指针的功能。
3.11 typdef 名字
typedef提供了一种通用的类型定义设施,可以用来为内置的或用户定义的数据类型引入助记符号。typedef定义以关键字typedef开始,后面是数据类型和标识符。
考虑:typedef char *cstring;
extern const cstring cstr;
请问:cstr的类型是什么?
答:char *const cstr。const修饰的是cstr类型,cstr是一个指针,所以这个定义声明了cstr是一个指向字符的const指针。
3.12 volatile限定修饰符
当一个对象的值可能会在编译器的控制或检测之外被改变,例如:一个被系统时钟更新的变量,那么该对象应该声明为volatile。因此,编译器执行的某些例行优化行为不能应用在已指定为volatile的对象上。volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变,因此编译器不能武断地对引用这些对象的代码做优化处理。
3.14 pair类型
pair使得我们可以在单个对象内把相同类型或不同类型的两个值关联起来。为了使用pair类,必须包含#include <utility>。
pair<string, string> author(“James”, “Joyce”);
author.first == “James” && author.second == “Joyce”
如果希望定义大量相同pair类型的对象,最方便的做法就是使用typedef。
相关推荐
在 C++ 中,word 是一种基本数据类型,而这里的修订是为了强调 word 的定义。 17. P79 错误:动态地添加元素更正:当元素值已知时,最好是通过动态地向它添加元素,来让它增长。 知识点:这里的修订是为了使容器...
在《C++ Primer Plus》这本书的第二章中,作者介绍了C++的基础语法,包括变量声明、输入输出、基本的数据类型等。为了帮助读者更好地理解这些概念并进行实践操作,书后提供了多个编程练习题。下面将详细介绍这些题目...
**参考资料**:[C++ Primer](https://example.com/c-primer) --- ##### 3. Algebraic Hierarchy(代数层次结构) **意图**:创建一个层次化的类结构,其中每个子类都表示一个特定类型的代数表达式。 **动机**:...
本章节通过几个具体的编程练习帮助读者掌握C++的基本语法,包括变量声明、数据类型、输入输出操作以及简单的函数定义等。接下来将详细介绍这些练习题目的解法及背后的原理。 ##### ex2.1 — 显示姓名和地址 **题目...
根据提供的文档信息,我们可以归纳出一系列与C++编程相关的知识点,包括但不限于基本语法、函数定义与调用、数据类型转换等内容。以下是对这些知识点的详细解释: ### 一、基本语法与程序结构 #### 1. 输出语句 `...
1. **基本数据类型**:了解整型(int)、浮点型(float/double)、字符型(char)等基础数据类型及其使用场景。 2. **变量与常量**:掌握变量的声明、初始化方法;理解常量的作用和使用规范。 3. **运算符**:熟悉算术...
它详细介绍了C++的基础知识,包括变量、数据类型、运算符、流程控制、函数、数组、指针、结构体等,并逐步引导读者掌握面向对象编程的概念。通过这本书,读者可以构建坚实的C++基础。 2. **McGraw.Hill.C++ From....
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
文档类 CDocument 对象。CFrameWnd 是顶级窗口,它管理菜单...[3] C++ Primer Plus. (2013). Stephen Prata. Pearson Education. 附录 附录中可能包含源代码、调试记录、设计文档等相关材料,以便于后续的查阅和分析。