关注“杜明c”,每天进步一点点!

已经时隔一个多月没有发文章了,主要是太忙了,绝不是偷懒今天给大家聊一聊指针和引用的不同之处在哪里。

摘要

  • 指针的使用

  • 引用的使用

  • 二者的区别

  • 后话

指针的使用

在C语言中,我们怎么样在子函数中交换两个数,很简单的一个函数,大家第一时间总是想到它。

void exchange(int* a, int* b){    int c;    c = *a;    *a = *b;    *b = c;}

我们在主函数中调用它,就可以完成数据交换。

int main(){    int a=1, b=2;    exchange(&a, &b);    printf("a=%d,b=%d", a, b);    return 0;}----out----a=2,b=1

引用的使用

在中C++,对于指针的使用还有另一种替换方法,我们把这种方法称为“引用”

注意,只有C++才能使用引用!

void exchange(int& a, int& b){    int c;    c = a;    a = b;    b = c;}

在主函数中调用它

int main(){    int a=1, b=2;    exchange(a, b);    printf("a=%d,b=%d", a, b);    return 0;}----out----a=2,b=1

再看一下引用的用法

int main(){    int a = 7;    int& b =a;    b = 2;    printf("a=%d,b=%d",a,b);    return 0;}----out----a=2,b=2

二者的区别

那么引用和指针有什么区别呢

  • 指针本质上是数据的”地址“,引用本质上还是数据地址,但是因为用法不同,我们把它称作数据的“别名”

  • 指针能重复赋值,指向不同的对象,引用不能重复赋值。

  • 指针可以使用多级,引用只能是一级。

总结一下,其实我们可以把引用当成一个常量的指针。

指针 引用
地址 别名
可重复赋值 不可重复赋值
多级指针 一级引用
int&  a;    //合法,变量的别名int*& a;    //合法,指针的别名int&& a;    //非法,多级引用int&* a;    //非法,指向别名的指针

后话

你知道为什么main需要int作为返回值吗,void行不行?

int main(){    return 0;}

严格来说,main都应该使用int作为返回值,因为即使在当前环境下使用void没有报错,在另外环境或者编译器中可能不能正常运行。

End

杜明c

专注C/C++

长按关注

指针和引用的区别_浅析指针与引用相关推荐

  1. 一维数组和二维数组的区别_数组指针和指针数组的区别

    数组指针和指针数组的区别 - hongcha_717 - 博客园​www.cnblogs.com 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整 ...

  2. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  3. 软引用和弱引用的区别_强、软、弱、虚引用的区别和使用

    原文阅读: 强.软.弱.虚引用的区别和使用​mp.weixin.qq.com Java提供了四种级别的应用类型:强引用.软引用.弱引用及虚引用.那么这四种引用类型有什么区别呢? 首先我们通过一张图来看 ...

  4. 指针和 php引用的区别,c的指针和php中的引用的区别

    https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量 ...

  5. 成品开卡和测试架的区别_浅析花盆与花箱阳台,廊架和花架的区别

    一.花盆与花箱阳台的区别 花箱阳台顾名思义就像一个盒子,样式和大小都可以定制.主要用于道路隔离花箱,新颖,也适用于公园.广场.花园等.安装后直接装满,种花就可以了.有了花箱这道风景线,使原来没生机的水 ...

  6. java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别

    学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...

  7. mysql怎么引用别的文件_用source语句引用mysql文件的细节注意

    今天在使用 mysql数据库的时候,创建 数据表的时候出现了很多的小问题,今天一天花费了大量的时间去解决这些问题.首先就是一些小的细节,在文本编辑器上编辑好了SQL语句,然后转移到mysql的命令行中 ...

  8. java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()

    案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...

  9. 右上角的引用文献格式_撰写学术论文引用文献时,标准的格式是怎样的?

    参考文献标准格式: 一.期刊类[J]: [格式][序号]作者.篇名[J].刊名,出版年份,卷号(期号):起止页码. [举例]王海粟.浅议会计信息披露模式[J].财政研究,2004,21(1):56-5 ...

最新文章

  1. BCH钱包的“现金”支持比特币现金NFC交易
  2. 两个对于Apriltag图片处理问题讨论
  3. Field、CopyField、DynamicField的一些简介,用法
  4. P3226-[HNOI2012]集合选数【状压dp】
  5. Spark SQL(八)之基于物品的相似度公式
  6. 1026. Table Tennis (30)
  7. Linux(RadHat)基础学习—FTP服务
  8. SQA定义、质量模型、SQA与测试的关系
  9. python两个函数中传递变量_如何在Python中向函数传递大量变量?
  10. java反编译使用报错_Java反编译class
  11. window核心编程 22.3 DIPS.exe的踩坑逻辑梳理
  12. 个人网页制作 大学生个人网页设计 个人网站模板 简单静态HTML个人网页作品 HTML+CSS+JavaScript
  13. 【开源】百度中文依存句法分析工具DDParser重磅开源,快来体验一下吧
  14. MySQL报错:ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the new value must be a superset
  15. 【笛子的Spring5学习】AOP介绍
  16. 01-初探MQ-MQ的三大使用场景:应用解耦、异步提速、削峰填谷
  17. 搭建PHP网站开发环境
  18. 固态硬盘是什么接口_SATA M.2 PCIe?一分钟教你认识固态硬盘接口
  19. anyRTC 重磅推出在线实时 K 歌解决方案
  20. 图形化初始化达梦数据库

热门文章

  1. css 大于号 标签_web前端教程之怎样学好css?
  2. php 对象字面量,js的字面量对象和JSON的区别
  3. 深度学习之迁移学习实现神奇宝贝识别
  4. Doom HDU - 5239(线段树+思维)
  5. 计算机系统结构怎么提高代码效率,北邮 计算机系统结构 实验报告(全部)指令流水线相关性分析 DLX 处理器程序设计 代码优化.doc...
  6. python输入流和输出流_python读写gbk、utf-8等输入输出流
  7. 『设计模式』状态模式(不起花里胡哨的名字了)
  8. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
  9. 杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)
  10. 数据结构-栈应用之逆波兰表达式(后缀表达式)