一、引用
引用是对象的替代名称,以简化实体之间的通信。当声明一个引用变量时,不会在内存中创建一个新的对象,而只是声明一个现有变量的替代名称
int& rScore = score;//声明类型为int&的引用变量B,并将其绑定到A上
引用变量在原始变量前加上r并将首字母大写,形成约定,方便查看绑定的对象
1.规范
1.复合类型
引用类型是复合类型,但不能用double&的引用变量来引用int类型的变量
2.永久绑定
引用关系一旦建立后,就不能被更改
3.多重性
可以将多个引用变量绑定到同一个变量,不能将一个引用变量绑定到多个变量
4.不能绑定到值
2.检索值
3.修改值
可以通过原始变量或者任何引用变量修改该值,除非使用const修饰符
4.引用的应用
两个变量使用相同的内存位置,当两个变量处于不同的作用域时使用引用
1.按引用传递
主调函数需要将一个(或多个)对象传递给被调用函数进行处理
按值传递有两个问题,一是形参改变不影响实参,一是复制成本高
(1)如果需要防止更改操作,则应该:(a)对于小对象,使用按值传递;(b)对于大对象,使用按常量引用或按常量指针传递。
(2)如果需要进行更改操作,则应该使用按引用传递或者按指针传递
不能把引用的形式参数绑定到实际参数值
2.按引用返回
被调用函数具有必须返回到主调函数的对象
按值返回存在复制成本高的问题
按引用返回的对象不能是值参数或者局部变量(静态变量除外)
二、指针
指针类型是表示内存位置地址的复合类型,其字面量值是地址,指针变量是其内容为指针类型的变量
1.地址
变量的地址是该变量所占用的第一个字节的地址
2.指针类型和指针变量
为了创建指向某个类型的指针,我们将星号(*)添加到类型名称后面
1.指针变量
存储在指针变量中的是一个4字节的地址
1.声明
bool* pFlag;
从右向左读取声明(pFlag是一个指针,指向bool类型)
2.初始化
指针变量必须用内存中的有效地址初始化
bool* pFlag = &flag;
3.间接引用(解引用)
在主调函数中使用直接方法,在相应的被调用函数中使用间接方法
*pFlag;
4.两个相关的运算符
地址运算符&用于取地址,接收一个变量并返回其地址
间接运算符*用于间接访问,接收一个地址并返回相应的被指变量的值
3.使用const修饰值更改指针
如果指针关系为常量,则无法中断其关系并使指针指向另一个数据变量,此时const修饰符必须放在指针变量的名称前面
4.指向指针的指针
指向指针的指针用双星号(**)
5.两种特殊的指针
1.不指向任何对象的指针(null指针)
不指向任何内存位置的指针,绑定到字面量0,在绑定到有效地址之前无法使用
int* p1 = 0;
double* p2 = 0;
2.指向void的指针(void指针)
void指针是一个通用指针,可以指向任何类型的对象,但在转换为适当的类型前无法引用
6.指针的应用
1.按指针传递
按指针传递的复制成本是固定的4字节地址成本
与按引用传递不同,没有共享形参和实参
2.按指针返回
被调用函数具有必须返回到主调函数的对象
三、数组与指针
1.一维数组
数组的名称是指向第一个元素的常量指针
当使用指针引用数组元素时,需要使用括号来优先计算加法运算符
1.指针的算术运算
指针可进行有限的算术运算
指针减指针得到一个整数
两个指针不能相加
2,带数组参数的函数
形参可用int* p代替array[]传递
2.二维数组和指针
C++中的二维数组是数组的数组
用int(*)[列数]代替数组传递
四、内存管理
C++程序运行时,会使用内存位置
1.代码内存
代码内存存储程序代码,当程序终止时释放其占用的内存
2.静态内存
静态内存用于保存全局对象和静态对象,当程序终止时释放其占用的内存
3.栈内存
栈内存是程序用来保存函数的局部对象或者参数对象的内存部分
在栈内存中创建的对象在编译期间必须具有名称和大小
4.堆内存
在堆内存中创建的对象不能有名称,只能通过其地址访问它,该地址由栈内存中的指针访问
1.new和delete
1.分配对象:new type
2.分配数组:new type [size]
3.释放对象:delete ptr
4.释放数组:delete [] ptr
2.有关堆内存的问题
1.释放没有分配的内存
没有new就不能delete
2.分配了内存但没有释放(内存泄漏)
new了但没有delete
3.悬空指针
delete后再使用时会报错
5.二维数组
1.仅使用栈内存
编译前数组的行列均已知
2.同时使用栈内存和堆内存
编译前数组的行已知,列未知文章来源:https://www.toymoban.com/news/detail-470713.html
3.仅使用堆内存
编译前数组的行列均未知文章来源地址https://www.toymoban.com/news/detail-470713.html
到了这里,关于C++程序设计基础【五】(引用和指针)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!