引用是对象的替代名称,以简化实体之间的通信。当声明一个引用变量时,不会在内存中创建一个新的对象,而只是声明一个现有变量的替代名称
int& rScore = score;//声明类型为int&的引用变量B,并将其绑定到A上
引用变量在原始变量前加上r并将首字母大写,形成约定,方便查看绑定的对象
引用类型是复合类型,但不能用double&的引用变量来引用int类型的变量
引用关系一旦建立后,就不能被更改
可以将多个引用变量绑定到同一个变量,不能将一个引用变量绑定到多个变量
可以通过原始变量或者任何引用变量修改该值,除非使用const修饰符
两个变量使用相同的内存位置,当两个变量处于不同的作用域时使用引用
主调函数需要将一个(或多个)对象传递给被调用函数进行处理
按值传递有两个问题,一是形参改变不影响实参,一是复制成本高
(1)如果需要防止更改操作,则应该:(a)对于小对象,使用按值传递;(b)对于大对象,使用按常量引用或按常量指针传递。
(2)如果需要进行更改操作,则应该使用按引用传递或者按指针传递
不能把引用的形式参数绑定到实际参数值
被调用函数具有必须返回到主调函数的对象
按值返回存在复制成本高的问题
按引用返回的对象不能是值参数或者局部变量(静态变量除外)
指针类型是表示内存位置地址的复合类型,其字面量值是地址,指针变量是其内容为指针类型的变量
变量的地址是该变量所占用的第一个字节的地址
为了创建指向某个类型的指针,我们将星号(*)添加到类型名称后面
存储在指针变量中的是一个4字节的地址
bool* pFlag;
从右向左读取声明(pFlag是一个指针,指向bool类型)
指针变量必须用内存中的有效地址初始化
bool* pFlag = &flag;
在主调函数中使用直接方法,在相应的被调用函数中使用间接方法
*pFlag;
地址运算符&用于取地址,接收一个变量并返回其地址
间接运算符*用于间接访问,接收一个地址并返回相应的被指变量的值
如果指针关系为常量,则无法中断其关系并使指针指向另一个数据变量,此时const修饰符必须放在指针变量的名称前面
指向指针的指针用双星号(**)
不指向任何内存位置的指针,绑定到字面量0,在绑定到有效地址之前无法使用
int* p1 = 0;
double* p2 = 0;
void指针是一个通用指针,可以指向任何类型的对象,但在转换为适当的类型前无法引用
按指针传递的复制成本是固定的4字节地址成本
与按引用传递不同,没有共享形参和实参
被调用函数具有必须返回到主调函数的对象
数组的名称是指向第一个元素的常量指针
当使用指针引用数组元素时,需要使用括号来优先计算加法运算符
指针可进行有限的算术运算
指针减指针得到一个整数
两个指针不能相加
形参可用int* p代替array[]传递
C++中的二维数组是数组的数组
用int(*)[列数]代替数组传递
C++程序运行时,会使用内存位置
代码内存存储程序代码,当程序终止时释放其占用的内存
静态内存用于保存全局对象和静态对象,当程序终止时释放其占用的内存
栈内存是程序用来保存函数的局部对象或者参数对象的内存部分
在栈内存中创建的对象在编译期间必须具有名称和大小
在堆内存中创建的对象不能有名称,只能通过其地址访问它,该地址由栈内存中的指针访问
没有new就不能delete
new了但没有delete
delete后再使用时会报错
编译前数组的行列均已知
编译前数组的行已知,列未知
编译前数组的行列均未知