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))
但是你答对了,面试官问你
- 为什么不能加分号?
- 为什么要加外面的括号?
- 为什么要加里面的括号?
你举例,回答
可以加括号但是分情况,
分号表示语句的结束所以;;可以存在,但是在下面就不行了
当用ADD乘的时候,如果不加是乘那一边呢。
这个需要懂得一些优先级
👀想知道更多优先级总类的看这里
宏的好处:虽然宏函数坑,但是不用建立栈帧,提效,c++用inline来替代