c++ 传参传值地址_C指针与C++引用的对比(代码实测)

点击上方公众号名称关注,获得更多内容

16eb9f6e605671c73e193417fe6a7ba4.gif ✎ 编 者 悟 语

      当你不知道为什么去坚持的时候,就用已有的习惯去做吧,也许有一天你会发现,相对于整件事情来说,也许并不需要时时刻刻的去支撑。

文 章 导 读

    今天给大家对比了一下C语言指针的地址传递与C++引用的关系,可以说C++的引用是对C语言的一种封装性的扩展,封装之后更方便灵活,就让我们从代码中去对比体会吧,希望对大家有所帮助哈,4d614f5a8c9e9c03edb5394a59e1c42e.png

1引用是什么

    引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。

    C++在保留指针的情况下扩展了类、继承、多态等内容,目的是对于细节明确的用指针去操作,不需要深究细节的就用封装的类和继承以降低难度和编码的效率。

    但从本质来说,由于C++是用C实现的,所以很多类的封装都是用指针实现的,所以C++的一些属性中会有C的身影,所以我们下面的对比就不足为怪了。

2C++中的引用作用的对象

    在C++中引用作用的对象主要有参数、返回值,作为常引用。

    1)引用作用于参数

    函数功能:通过引用函数修改引用函数之外的变量的值。

#include 
using namespace std;int quote(int &val);int main(int argc, char** argv) {int num = 1, temp; 
    cout <"\nThe num's raw value is " < 
    temp = quote(num);
    cout <"\nAfter calling the quote function the num's value is " <return 0;
}int quote(int &val){
   val = 2;return val;
}

    运行结果如下:

f0d41bfa0626d1395f665151fb84cc63.png

结论:按引用传参与按指定传参效果是一样的。

3用C中指针模拟实现引用的功能

    1)引用与指针和数组的关系

    严格讲C语言中总是按值传参的,可以定义接受指针的函数,调用使用&操作符。

当函数传入数组时,编译器本质实际上就是模拟引用传参。

    C中的模拟引用传参实在是地址传递。

    传递地址一种情况是&取地址,一种情况是数组名衍生的数组地址(实质也是指针)。

    2)C语言中模拟引用的方式(实例演示)

#include 
#include int ana_quote(int *pval);int main(int argc, char *argv[]) {int *p,val = 5,tmp;
    printf("\nThe raw pointer's value is %d",val);
    tmp = ana_quote(&val);
    printf("\n\nThe called ana_quote's value is %d",val);return 0;
}int ana_quote(int *pval){int temp;
    temp = ++(*pval);return temp;
}

    运行结果如下:

cc2095515304bb5b35de3b9d268f7da6.png

结论:用&取地址作为函数的指针参量,可以实现引用的效果。

总结

    今天给大家介绍了下C语言的指针与C++引用相似的点,为的是让大家对这两种语言在变量参量引用上有一个更清晰认识,后面还会有C语言相关的内容,小伙伴们敬请期待哈,69abb87086a111c94998c4083af48a6b.png

    有问题可以后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。

相关文章:

内存分配函数malloc、calloc、realloc的功能测试

static关键字的3种特性

用结构体和指针模拟配置芯片引脚输出高低电平

C标准库函数sprintf和sscanf的使用

用Dev-C++生成dll动态链接库文件并用C代码调用

宏分类的妙用(排版开始用模板)

进化论——从函数指针到被结构封装的函数指针及参数的应用举例

专辑推荐:

Python技能专辑

C语言专辑

IDE调试专辑

软件推荐专辑

软实力专辑

Linux专辑

扫码关注我们

a6fbc327a4f326e01c86cddf9c04284c.png

6b4f1b0775ddae4891203d6996ff3a9a.gif Game Over!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值