*:Hey, open the door!
&:What's your address?
*用于访问地址内的变量,&用于获得变量存储的地址。
定义并初始化指针:int* ptr=&a;,表示ptr获得int型变量a的地址,指针具有类型,但本质上都是数字。*ptr即可访问a,更改*ptr等价于更改a。定义并初始化指针时可以不给出某一变量的地址,如int* ptr=nullptr;(分配内存,初始化为空),也可以只定义后续再赋值。
定义并初始化引用:int& ref=a;,表示ref为变量a的引用(ref的地址为a的地址),ref不是一个变量,不占用内存,是变量a的“别名”,改变ref等价于改变a。定义引用时必须同时初始化,指明被引变量,被引变量不能更改为其他变量。
指针和引用大部分能做的事情相同,区别是引用是必须初始化且不能改变指向。
应用:
void add(int a){
a++;
}
void add_ptr(int* a){
(*a)++;
}
void add_ref(int& a){
a++;
}
int main(){
int a=5;
add(a); //此时a=5
add_ptr(&a); //此时a=6
add_ref(a); //此时a=7
}
add会拷贝传入的变量a,并更改拷贝的值,不会干预原变量。
add_ptr会接收变量a的地址,并修改该地址存储的变量,即修改a。
add_ref会接收变量a并做引用,修改引用等价于修改变量a。