1引用
引用是为变量起别名 实际上是在底层创造了一个常量指针,引用和其引用的对象必须为同种类型,
例如const int a=10;此时引用:int&b=a;会报错报错因为类型不同,正确的引用为const int &b=a;
定义引用时必须初始化,且不可以为空,引用关系不可改变
引用创建后,引用和变量没区别(地址都一样)
不占内存
2指针
指针存的是谁的地址 *指针就是谁
int a=10; int *p=&a; cout<<*p 值为10 cout<<p 值为p的地址
指针的访问方式是间接访问
野指针:
也叫悬挂指针,也就是不可用的指针,野指针出现原因一般有:
未初始化int*a 此时会报错;
指针被释放但没置空 此时不会报错,但是指针会指向随机地址
指针所指对象死亡 此时会报错
空指针:
闲置指针,没有被使用的指针,定义时 int*p=0或者int*p=NULL;编译器保证了他不会是任何一个被使用的地址 (00000000空地址可以重复,也就是说可以有多个空指针,他们的地址都是00000000)
空指针不是错误,因为他是等待被使用的指针,但是要记得使用
指针的大小:
指针的大小是不分类型的,在64位环境下不论是int*还是char*,long*他们的大小都是8字节(64bit),而在32位下为4字节
但他们的区别在跨步时,每当指针+1;他们的地址就会根据类型变化 char*+1时,地址增加1,int*+1时,地址增加4
3引用和指针的区别
1.引用不占内存,指针占内存,引用的本质是起别名,引用创建后和对象共用一个地址; 指针是一个实体 占用空间
2.引用必须初始化,且不能初始化为空; 指针不作要求
3.引用++是将变量++; 指针++时是把地址++
4.有多级指针没有多级引用
5.引用不能改变引用关系; 指针不作要求
(自己整理,如有错误请指正)