当前位置: 首页 > news >正文

c++面试常考问题之引用与指针的关系,ADD如何用宏写

一,指针和引⽤的关系

C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。

  • 语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
  • 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
  • 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
  •  引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
  • sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下 占4个字节,64位下是8byte)。
  • 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。

注意⚠️:别死记硬背,要理解看懂即可。

二,实现一个ADD宏函数的常见问题

如何正确写出,下列哪个正确

#define ADD(int a, int b) return a + b;
#define ADD(a, b) a + b;
#define ADD(a, b) (a + b)

看着都挺有道理,但事实上哪个都不对。

正确的宏实现

#define ADD(a, b) ((a) + (b))

但是你答对了,面试官问你 

  1. 为什么不能加分号?
  2.  为什么要加外面的括号?
  3.  为什么要加里面的括号?

你举例,回答

可以加括号但是分情况,

分号表示语句的结束所以;;可以存在,但是在下面就不行了 

当用ADD乘的时候,如果不加是乘那一边呢。

 这个需要懂得一些优先级

👀想知道更多优先级总类的看这里

宏的好处:虽然宏函数坑,但是不用建立栈帧,提效,c++用inline来替代

相关文章:

  • 内核编程八:基于printk宏的pr_* 宏
  • 网络安全中蓝牙攻击有哪些?
  • EasyDSS视频推拉流系统:清理缓存文件时如何确保缓存读写不受影响?
  • 【无标题】FrmImport
  • 最短路算法 dijkstra 从认识到熟练掌握
  • 爬虫:从Chrome浏览器进行抓包详解
  • 【AD】PCB增加相关图层——以机械层为例
  • DAViMNet:基于状态空间模型的域自适应目标检测
  • 【单片机】嵌入式系统的硬件与软件特性
  • python代码注释方式
  • Apache Tomcat 新手入门指南:从安装到部署的全流程解析
  • 深入解析 C# 中的泛型:概念、用法与最佳实践
  • Win11存储空间掉盘修复,正确移除不存在的硬盘
  • Python如何制作并查询sql数据库
  • 2000-2020年各省社会消费品零售总额数据
  • kotlin的val声明的变量是常量吗
  • 深入理解 FreeRTOS 的中断管理:屏蔽机制、临界区与实验分析
  • MySQL的底层原理与架构
  • 【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式
  • 如何在DEV community上发表blog?
  • 新乡网站建设服务哪家好/品牌营销策略案例
  • 网站站内链接怎么做/营销型网站定制
  • v9双语版网站怎么做/百度seo优化排名
  • 当下网站建设/百度广告价格
  • 直播网站开发平台/营销战略有哪些内容
  • 太原网站的优化/短信广告投放