C++ 初阶总复习 (持续更新)
C++ 初阶总复习 (持续更新)
- 目的
- 1~10
- 1988. C++中值传递和引用传递的区别?
- 1989. C和C++的区别
- 1996. C++中static的作用 什么情况下使用static
- 1997. C++中const的作用
- 1998. const和define的区别
目的
写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 (如果不整理下 磕磕绊绊的回答会被认为是不熟悉)
本文章题目的主要来源来自于 面试鸭
部分面试鸭上没有而牛客网上有的博主会进行查缺补漏
题目编号按照面试鸭官网题号方便大家寻找
题解大部分是博主根据自己之前的博客再加上部分网上的内容进行口语化的表述 如果涉及到省略的部分博主会提供自己或者其他人的博客链接
题目会按照由简单到难进行更新
1~10
1988. C++中值传递和引用传递的区别?
这个问题涉及到三篇博客
函数栈帧上 下
引用
回答
值传递是在函数传递参数的过程中 进行的一次浅拷贝 比如说在我们传递值参数的时候 在函数栈帧中我们只是将这个参数的数值拷贝了一部分用于执行函数内容的内容 执行后不影响这个参数本身
引用则是一个参数的别名 就跟别人叫你的别名一样 假如你的舍友叫你的某个别名邀约一起去吃饭 是不是就是邀请你一起去吃饭啊 也就是引用传递会对本身造成印象
追问
什么情况下使用值传递 什么情况下使用引用传递呢?
我们这里可以综合下值和引用传递的两个特征
- 引用传递是对本身进行修改 值传递不是
- 引用传递不拷贝 而值传递在进行函数栈帧的时候则会进行拷贝
所以说我们就能很简单的得出结论
- 当我们要对本身进行修改的时候使用引用传递 否则使用值传递
- 当对象拷贝会损失过多性能的时候使用引用传递
1989. C和C++的区别
参考博客
初识C++
回答
C++是C语言的超集 在一个cpp文件中写一个C语言程序是会被运行通过的
C++是一门面向对象的语言 所以说有一系列面向对象的特性 如封装 继承 多态等 (这里可以多提一嘴自己很熟悉这些特性 引导面试官往这些问题上提问 )
而C语言则是一门面向过程的语言
拿洗衣服来距离 如果面向过程则我们需要关注拿脏衣服 拿盆 放水等等这种过程
而面向对象则我们只需要调用洗衣服这个接口即可
C++中有模板 nullptr 智能指针等等等等 如果自己熟悉那个部分就把后续的问答往哪个部分引导
1996. C++中static的作用 什么情况下使用static
参考博客
C语言关键字
回答
C语言中static关键字主要有三个用处
- 修饰局部变量
- 修饰全局变量
- 修饰函数
修饰局部变量的话能够延长该变量的生命周期到程序结束 原理其实就是将这个变量从栈区放到静态区去了 避免了函数栈帧消栈的时候死亡 至于是去静态区的date(已初始化) 还是 bss (未初始化)段就看他自己了
修饰全局变量和函数的作用是一样的 能够使其失去外链属性 也就是让其他文件不能调用
在C++中static还可以修饰类的成员函数和成员变量 这样子我们调用该函数的时候就不必创建对象了 可以直接用类调用 (本质是让他没有this指针)
说到this指针 有同学知道this指针是存放在哪里的嘛? 栈区或者寄存器
还有一种特殊用法就是来统计一个创建了多少个对象 (在构造函数中+1) 最后查看即可
1997. C++中const的作用
参考博客
const的作用
回答
在C语言中cosnt一般有三个
修饰变量 修饰指针 修饰引用
作用差不多都是让变量具有常属性
但是这个const防君子不放小人 你要是硬要找到这个变量的地址去修改 那还是能改的
关于修饰指针const有两种不同的用法
一个就是让指针不能修改当前位置的变量 但是指针地址可以修改 const在* 前
一个就是让指针的地址不能被修改 但是变量可以修改 const在*后
1998. const和define的区别
参考博客
预处理相关知识
回答
我们都知道函数生成的过程有下面四个阶段嘛 预处理 编译 汇编 链接
而define主要是在预处理阶段生效的 他只是进行一个简单的替换
而const则是定义了具有常属性的变量
一般来说 如果我们需要一个常量值在全局定义的话 我们一般使用const 更加的安全