目录
1.引用
类型名+&+标识符
例:int &a=b
1.1.引用必须初始化
定义一般变量时:
(1)声明:声明变量类型和名字
(2)定义:根据类型分配内存地址空间
(3) 初始化:将初始值拷贝到变量的内存地址空间中(因此变量的声明,定义和初始化可以分开,不需要一次完成)
定义引用类型时:
将引用直接绑定到初始化对象
因此定义引用类型时必须有初始值对象(必须为左值)
1.2.引用数组
数组的三个例外:
int ar[5]={1,2,3,4,5}
- sizeof有type 和num,sizeof(ar)=20
2. 数组的地址时,要有type和num。
例:int(*p)[5]=&ar
sizeof(p)=4
sizeof(*p)=20
3.引用时要有类型和大小。int(&br)[5]=ar
注:1.int &ar[5]错误,因为引用不需要空间,需要加括号
2.引用可以是对指针的引用
int &*p error
1.3.const+&:
s1只能读取不能修改
S2可以修改,但不能指向别的地址,别名也不可以
const+&是万能引用,可以引用字面常量,常量,变量,若只有&,没有const是不可以定义字面常量的
1.4.引用和指针的区别:
从语法规则上讲
- 指针变量时存储某个 实例(变量或对象)的地址
引用时某个实例的别名
- 程序为指针变量分配内存空间,不为引用分配
- 指针在使用是需要解引用要加*,引用可以直接使用
- 指针变量的值可以发生改变 ,之后无法改变
- 指针变量作为形参时要测试它的合法性,引用不需要
- sizeof得到的是指针变量的大小。引用得到的是变量大小
- 理论上指针的级别没有限制,但引用只有一级
- ++引用与++指针的效果不一样
- 对引用的操作直接反应到所引用的实体上
- 不可以对函数中的局部变量或对象以引用或者指针方式返回
汇编层面:mov eax, 10h 直接
mov [eax],10h 间接
1.5.引用的注意事项
1.左值引用不能引用一个常量
2.引用必须初始化,没有空引用
3.没有引用的引用