- 1.引用
引用就是一个绑定,程序把引用和它的初始值绑定在一起。引用只能绑定在对象上,不能和值绑定在一起。
int a=11; int &b=a; a=1111; int &c=b; cout<<b<<endl<<c; return 0;
此处b的输出值为1111,b指向a,是a的另外一个名字。c绑定到b绑定的对象上,也就是绑定到a上,c的输出值也为1111.
所谓引用:它只是为存在的对象所起的另外一个名字。它不是一个对象,没有实际的地址 。如
int &My_value = 10;
错误,&my_value没有地址,怎么可以赋值。
- 2.指针
指针也是一个引用,相比于引用的不同点:
1.指针本身也是一个对象,可以对其赋值和拷贝
2.指针可以不用初始化(最好不要不用初始化),和其他的内置类型一样。
指针存放着某个对象的地址,获取地址用取地址符。如 int *p=&a;
指针和它指向的对象的类型要严格匹配。
利用指针访问对象,用到解引用符*,用法:int*p=&a;cout<<*p;
注:*和&的多重含义:(非常重要!!!)
int &a=b;//&紧随类型名出现则表示引用
p=&a//&出现在表达式中表示取地址
int *p//*紧随类型名出现表示一个指针
*p=i//*出现在表达式中,是一个解引用符
所有的指针最好都初始化,生成空指针的方法:
int *p=nullptr//生成空指针的方法
或
int *p=0//要声明头文件
- 习题2.18
int a=8,b=2;
int *p=&a,*q=&b;
cout<<p<<endl<<*p<<endl;
p=&b;//&紧随类型名出现则表示引用
cout<<p<<endl<<*p<<endl;
*p=b;//加不加一样,p=&b中改变了p的值,所以也改变了*p的值
cout<<p<<endl<<*p<<endl;