引用传参与指针传参的区别
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. 指针传参:
以上是关于引用传参与指针传参的区别的主要内容,如果未能解决你的问题,请参考以下文章