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. 指针传参:
原文地址:https://www.cnblogs.com/mtastrid/p/10349170.html
时间: 2024-10-13 17:33:45