码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-03 12:37:27      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:log   width   std   栈空间   存储空间   nbsp   space   改变   article   

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

技术图片

 

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

标签:log   width   std   栈空间   存储空间   nbsp   space   改变   article   

原文地址:https://www.cnblogs.com/mtastrid/p/10349170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!