c++复合类型知识总结

                     第四章———复合类型

一、指针和引用
1、内存:是有序的字节序列,每个字节都有唯一的地址。使用该地址可以确定字节的位置,用以存储和获取数据。访问内存分为直接访问(通过变量的名字直接访问)和间接访问(使用变量的内存地址找到存放数据的单元)两种方式。
2、指针可以持有对象的地址,引用则是对象的别名。
3、指针持有一个对象的地址,称为指针“指向”这个对象,该对象可以通过指针间接操纵。指针为32位无符号整数,在内存中占4个字节。每个指针都有相关类型,需在定义指针时指出,其定义指针变量的语法为:“类型 指针变量;”。指针要想获取对象的地址,使用取地址运算符“&”;要想通过指针间接访问该对象,使用指针解引用运算符“”(取目标变量内容)。
4、指针不能保存非地址值,也不能被赋值或初始化为不同类型的地址值。
5、指向一个对象的指针有两个存储单元与之相关:一个是指针自己的存储单元,里面存放着所指对象的地址;一个是指针指向对象的存储单元,里面存放该对象的值。
6、表示空指针(指针为0)的方式:引入字面值nullptr;直接初始化为0;使用头文件中定义的预处理常量NULL。
7、定义指针时,应对指针进行初始化,但变量的内容不能初始化指针。
8、指针的运算:同类型的指针可以进行相等(==)或不相等(!=)的比较操作,比较的结果是布尔类型。
指针可以进行加或减整数值的算术运算,自增、自减运算适用于指向数组元素的指针。
9、void指针:可以持有任何类型的地址值,即通用指针。相关的值是个地址,但是该地址保存的对象类型不知道。不能操纵void指针指向的对象,只能传送该地址值或者和其他地址值进行比较。不允许void指针到其他类型指针的直接赋值。
10、指针的典型用法:构建链式的数据结构,如链表和树;管理程序运行时动态分配的对象;作为函数的参数。
11、存储空间分配策略:①静态(编译时)分配空间:编译器在处理程序源代码时分配内存;效率高,灵活性差,运行前就要知道程序需要的内存大小和类型。②动态(运行时)分配空间:程序运行时调用运行时刻库函数来分配内存;占用程序运行时间,更灵活。
12、两者的区别:静态对象是有名字的变量,可以直接对其进行操作;动态对象没有名字,要通过指针间接地对它进行操作。静态对象的空间分配与释放由编译器自动处理,动态对象的空间分配与释放必须由程序员显式地管理。
13、动态内存管理方法:C++通过new和delete运算符进行动态存储空间的管理。
14、new运算符:在堆上动态分配空间,创建对象,并返回对象的地址。一般将new返回的地址保存在指针变量中,以便间接访问堆上的对象。
15、new表达式的三种形式:
①分配单个对象:new 类型 或者 new 类型(初始值)②分配多个连续存储的对象:new 类型[数组大小]③定位new,在指定位置分配空间:new (指针) 类型(使用时,必须包含标准头文件);
②注意事项:不能对数组进行显式的初始化。数组大小不必是常量,是数组元素的个数,不是字节数。用new分配数组时,并未得到一个数组类型的对象,而是得到一个数组元素类型的指针。
16、new运算符分配的空间用delete运算符释放:①释放new分配的单个对象的delete形式
delete 指针;②释放new分配的数组的delete形式delete[] 指针;③定位new没有对应的delete表达式。
17、引用常指左值引用,定义方式:类型 &引用常量=初始值;引用常用做函数的参数。引用必须被初始化,初始值是一个有内存地址的对象,一旦初始化完成,引用将和它的初始值对象一直绑定在一起。
18、左值与右值引用的定义与判别:在赋值表达式中,出现在赋值号左边的就是左值,而在赋值号右边的则称为右值。可以取地址的、有名字的就是左值;不能取地址的、没有名字的就是右值。在C++11程序中,所有的值必属于左值、纯右值和将亡值三者之一。
19、定义和初始化右值引用的形式:
类型 &&右值引用变量 = 右值表达式;
右值引用由类型标识符和两个取地址符(&&)定义。右值引用必须被初始化,初始值是右值表达式。能将右值引用直接绑定到一个左值上。
20、const限定词将一个对象限定为常量,也可以限定指针和引用。①指向常量的指针②指向const对象的const指针
const type cp; 或者type const cp;
cp是指向常量的指针,它所指向的内存中的内容不可以改变,即
cp的值不能改变
③指向非const对象的const指针
type
const cp = initAddressValue;
cp是常量指针,初始化后值不能改变,指向固定的单元
④const限定引用
const限定的左值引用不可修改,
const引用可以绑定到const对象,
不能用非const引用指向const对象。
21、volatile限定词使用语法跟const相同。两者一起被称为CV限定词。
二、结构体、联合和枚举
1、结构体把一组来自不同类型的数据组合在一起构成复合类型,其中的每个数据都是结构体的成员。结构体由关键字struct定义,语法形式:
struct 结构体类型名{
成员声明;
};
结构体的成员不能独立使用,必须由结构体类型的变量通过成员选择运算符“.”来选择,或者由结构体类型的指针通过“->”运算符选择。
2、可以指定枚举成员的值,可以使用未命名的枚举类型定义常量。不能使用枚举成员进行迭代。
3、联合由关键字union定义,也称共用体,union的每个成员都从联合变量的首地址开始存储,所以每次只能使用一个成员。
三、内置数组
1、一个数组不能被另一个数组初始化,也不能被直接赋值给另一数组。多维数组也可被初始化。
2、一维数组元素在内存中按下标顺序依次存放:
一维数组a[n]的元素a[i]在内存中地址是a+i。
多维数组在内存中按行序存储:
二维数组a[m][n]的元素a[i][j] 在内存中的地址是a+(i
n+j)
使用指针访问数组时需要控制指针的范围。
3、库函数begin()和end()
让指针在数组上的使用更简单更安全
在头文件中定义
用法:
begin(数组名)
返回指向数组第一个元素的指针
end(数组名)
返回指向数组最后一个元素的下一个位置的指针。
3、两个指针相减的结果是它们之间的距离
参与运算的两个指针必须指向同一个数组中的元素。
四、标准库类型string
1、string 表示可变长度的字符序列,字符串是对象,使用string 类要包含头文件。
2、初始化string对象的方式与string的操作的具体表述见课本。
3、可以用循环读取未知数量的string对象。
4、getline()函数
两个参数:输入流对象和存放读入字符串的string对象
从指定输入流中读取内容,遇到换行符为止;将所读内容存入指定的string对象中,流中的换行符被读取并丢弃
返回参数输入流对象
5、empty()函数判断string对象是否为空,返回一个布尔值;size()函数返回string对象的长度,即对象中字符的个数;允许把一个string对象的值赋给另一个string对象。
6、字符串字面值不是string类型,而是const char*类型;string对象和C风格字符串的转换,可以将C风格的字符串直接赋给string对象,反之不可。
五、标准库类型vector(动态数组)
1、vector的特点:
表示对象的集合,其中所有对象的类型都相同,可以通过索引访问各个对象;
vector是对象,其中容纳着其他对象,被称为容器。
2、vector的用法:
vector是长度可变的向量,可替代内置数组
更灵活,更高效;
要使用vector,必须包含头文件。
3、定义vector时必须指定元素的类型,格式为:
vector<元素类型> 变量名;
定义的同时可以初始化vector对象,常用方法见课本113页。vector支持的操作见114页。
4、vector的大小可以动态变化,可以在初始化时指定vector对象的大小和初始值,常见用法是创建一个空vector,根据需要动态添加元素
①push_back()
将一个值添加到vector的末尾,并使vector的大小增加
②pop_back()
删除vector对象末尾的元素
5、不能用下标运算符向vector中添加元素
下标运算符只能访问已经存在的元素。
6、下标运算符访问:
使用下标运算符可以获取vector中指定位置的元素
vector类型对象的下标类型是vector::size_type
用下标访问vector中的元素要确保下标的合理范围,下标运算符不改变vector对象的大小。
六、迭代器
1、迭代器访问
访问标准容器的元素的通用方法是使用迭代器
2、迭代器在容器或string对象上使用,指向的对象是容器中的元素或string中的字符
begin()和end() 操作返回容器对象上的迭代器,如果容器为空,begin()和end()返回同一个迭代器,都是尾迭代器,cbegin()和cend()函数返回const_iterator。
3、内置数组,vector与string各自的区别与优点。
七、文件数据处理
1、C++标准库中的文件流:
ifstream类:用来输入(读文件)的文件流
ofstream类:用来输出(写文件)的文件流
fstream类:把文件连接到流对象用来输入和输出
2、使用文件流要包含头文件。
3、字符串流用于内存I/O,即在字符串上进行I/O操作
istringstream:从string对象中读取数据
ostringstream:向string对象写入格式化的内容
stringstream:从字符串读取数据,将数据写入字符串
4、使用时包含标准库头文件,在定义时直接用string对象初始化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值