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

Posted mtastrid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引用传参与指针传参的区别相关的知识,希望对你有一定的参考价值。

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. 指针传参:

技术图片

 










以上是关于引用传参与指针传参的区别的主要内容,如果未能解决你的问题,请参考以下文章

函数中传值跟传参的区别?

C语言中的值传参和引用传参是指啥?

shell程序传参和main函数传参的区别

传指针和传指针引用的区别/指针和引用的区别(本质)

结构体指针传参与返回值

vue路由传参query和params路由传参的区别?