指针和引用的区别_浅析指针与引用
关注“杜明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++
长按关注
指针和引用的区别_浅析指针与引用相关推荐
- 一维数组和二维数组的区别_数组指针和指针数组的区别
数组指针和指针数组的区别 - hongcha_717 - 博客园www.cnblogs.com 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整 ...
- C语言中指针与数组的区别,C语言 指针与数组的详解及区别
C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...
- 软引用和弱引用的区别_强、软、弱、虚引用的区别和使用
原文阅读: 强.软.弱.虚引用的区别和使用mp.weixin.qq.com Java提供了四种级别的应用类型:强引用.软引用.弱引用及虚引用.那么这四种引用类型有什么区别呢? 首先我们通过一张图来看 ...
- 指针和 php引用的区别,c的指针和php中的引用的区别
https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量 ...
- 成品开卡和测试架的区别_浅析花盆与花箱阳台,廊架和花架的区别
一.花盆与花箱阳台的区别 花箱阳台顾名思义就像一个盒子,样式和大小都可以定制.主要用于道路隔离花箱,新颖,也适用于公园.广场.花园等.安装后直接装满,种花就可以了.有了花箱这道风景线,使原来没生机的水 ...
- java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别
学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...
- mysql怎么引用别的文件_用source语句引用mysql文件的细节注意
今天在使用 mysql数据库的时候,创建 数据表的时候出现了很多的小问题,今天一天花费了大量的时间去解决这些问题.首先就是一些小的细节,在文本编辑器上编辑好了SQL语句,然后转移到mysql的命令行中 ...
- java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()
案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...
- 右上角的引用文献格式_撰写学术论文引用文献时,标准的格式是怎样的?
参考文献标准格式: 一.期刊类[J]: [格式][序号]作者.篇名[J].刊名,出版年份,卷号(期号):起止页码. [举例]王海粟.浅议会计信息披露模式[J].财政研究,2004,21(1):56-5 ...
最新文章
- BCH钱包的“现金”支持比特币现金NFC交易
- 两个对于Apriltag图片处理问题讨论
- Field、CopyField、DynamicField的一些简介,用法
- P3226-[HNOI2012]集合选数【状压dp】
- Spark SQL(八)之基于物品的相似度公式
- 1026. Table Tennis (30)
- Linux(RadHat)基础学习—FTP服务
- SQA定义、质量模型、SQA与测试的关系
- python两个函数中传递变量_如何在Python中向函数传递大量变量?
- java反编译使用报错_Java反编译class
- window核心编程 22.3 DIPS.exe的踩坑逻辑梳理
- 个人网页制作 大学生个人网页设计 个人网站模板 简单静态HTML个人网页作品 HTML+CSS+JavaScript
- 【开源】百度中文依存句法分析工具DDParser重磅开源,快来体验一下吧
- MySQL报错:ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the new value must be a superset
- 【笛子的Spring5学习】AOP介绍
- 01-初探MQ-MQ的三大使用场景:应用解耦、异步提速、削峰填谷
- 搭建PHP网站开发环境
- 固态硬盘是什么接口_SATA M.2 PCIe?一分钟教你认识固态硬盘接口
- anyRTC 重磅推出在线实时 K 歌解决方案
- 图形化初始化达梦数据库
热门文章
- css 大于号 标签_web前端教程之怎样学好css?
- php 对象字面量,js的字面量对象和JSON的区别
- 深度学习之迁移学习实现神奇宝贝识别
- Doom HDU - 5239(线段树+思维)
- 计算机系统结构怎么提高代码效率,北邮 计算机系统结构 实验报告(全部)指令流水线相关性分析 DLX 处理器程序设计 代码优化.doc...
- python输入流和输出流_python读写gbk、utf-8等输入输出流
- 『设计模式』状态模式(不起花里胡哨的名字了)
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
- 杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)
- 数据结构-栈应用之逆波兰表达式(后缀表达式)