引用传参与指针传参的区别

Reference: https://blog.csdn.net/u013130743/article/details/80806179

概念:

引用传参:引用是变量的别名。引用传参传递进形参列表的是实参的别名,在函数的执行中也会在栈空间上开辟存储空间,存储形参的地址

(也就是实参的地址)。对形参的任何操作都会间接寻址到实参。也就是在函数中对形参变量做的任何改变都会影响到实参变量。

指针传参:指针传参本质上是值传参。指针在形参列表中传递的是实参的地址。也就是说,指针的值的实参的地址。在函数的执行中在栈空间中存储的是实参的地址。但是如果在被调函数中改变指针的地址,则应用不到实参变量。如果使用对指针的解析(*p),就能访问到实参变量。

相同点:

都是地址的概念。

不同点:

1. 引用是变量的别名,有依赖。指针是一个实体,不具有依赖;

2. 引用是需要初始化的,且不能改变;指针可以改变地址指向。

3. 引用是类型安全的,引用过程会进行类型检查;指针不会进行安全检查。

code:

#include<iostream>
using namespace std;
void example(int& p){
    cout<<&p<<endl;
    cout<<p<<endl;
    p = 1;
}
void example2(int* p){
  cout<<p<<endl;
  cout<<*P<<endl;
  cout<<&p<<endl;
  *p = 1;
}
int main(){ int a = 0; cout<<&a<<endl; cout<<a<<endl; example(a); cout<<a<<endl;
   example(&a);
  cout<<a<<endl;  
return 0; }

图解:

1. 引用传参:

2. 指针传参:

猜你喜欢

转载自www.cnblogs.com/mtastrid/p/10349170.html