C++指针、引用

33 阅读1分钟

*: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