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

C++ 初阶总复习 (持续更新)

C++ 初阶总复习 (持续更新)

    • 目的
    • 1~10
      • 1988. C++中值传递和引用传递的区别?
      • 1989. C和C++的区别
      • 1996. C++中static的作用 什么情况下使用static
      • 1997. C++中const的作用
      • 1998. const和define的区别

目的

写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 (如果不整理下 磕磕绊绊的回答会被认为是不熟悉)

本文章题目的主要来源来自于 面试鸭
部分面试鸭上没有而牛客网上有的博主会进行查缺补漏

题目编号按照面试鸭官网题号方便大家寻找

题解大部分是博主根据自己之前的博客再加上部分网上的内容进行口语化的表述 如果涉及到省略的部分博主会提供自己或者其他人的博客链接

题目会按照由简单到难进行更新

1~10

1988. C++中值传递和引用传递的区别?

这个问题涉及到三篇博客

函数栈帧上 下

引用

回答


值传递是在函数传递参数的过程中 进行的一次浅拷贝 比如说在我们传递值参数的时候 在函数栈帧中我们只是将这个参数的数值拷贝了一部分用于执行函数内容的内容 执行后不影响这个参数本身

引用则是一个参数的别名 就跟别人叫你的别名一样 假如你的舍友叫你的某个别名邀约一起去吃饭 是不是就是邀请你一起去吃饭啊 也就是引用传递会对本身造成印象


追问

什么情况下使用值传递 什么情况下使用引用传递呢?

我们这里可以综合下值和引用传递的两个特征

  1. 引用传递是对本身进行修改 值传递不是
  2. 引用传递不拷贝 而值传递在进行函数栈帧的时候则会进行拷贝

所以说我们就能很简单的得出结论

  1. 当我们要对本身进行修改的时候使用引用传递 否则使用值传递
  2. 当对象拷贝会损失过多性能的时候使用引用传递

1989. C和C++的区别

参考博客

初识C++

回答


C++是C语言的超集 在一个cpp文件中写一个C语言程序是会被运行通过的

C++是一门面向对象的语言 所以说有一系列面向对象的特性 如封装 继承 多态等 (这里可以多提一嘴自己很熟悉这些特性 引导面试官往这些问题上提问 )

而C语言则是一门面向过程的语言

拿洗衣服来距离 如果面向过程则我们需要关注拿脏衣服 拿盆 放水等等这种过程

而面向对象则我们只需要调用洗衣服这个接口即可

C++中有模板 nullptr 智能指针等等等等 如果自己熟悉那个部分就把后续的问答往哪个部分引导

1996. C++中static的作用 什么情况下使用static

参考博客

C语言关键字

回答

C语言中static关键字主要有三个用处

  1. 修饰局部变量
  2. 修饰全局变量
  3. 修饰函数

修饰局部变量的话能够延长该变量的生命周期到程序结束 原理其实就是将这个变量从栈区放到静态区去了 避免了函数栈帧消栈的时候死亡 至于是去静态区的date(已初始化) 还是 bss (未初始化)段就看他自己了

修饰全局变量和函数的作用是一样的 能够使其失去外链属性 也就是让其他文件不能调用

在C++中static还可以修饰类的成员函数和成员变量 这样子我们调用该函数的时候就不必创建对象了 可以直接用类调用 (本质是让他没有this指针)

说到this指针 有同学知道this指针是存放在哪里的嘛? 栈区或者寄存器

还有一种特殊用法就是来统计一个创建了多少个对象 (在构造函数中+1) 最后查看即可

1997. C++中const的作用

参考博客

const的作用

回答


在C语言中cosnt一般有三个

修饰变量 修饰指针 修饰引用

作用差不多都是让变量具有常属性

但是这个const防君子不放小人 你要是硬要找到这个变量的地址去修改 那还是能改的

关于修饰指针const有两种不同的用法

一个就是让指针不能修改当前位置的变量 但是指针地址可以修改 const在* 前

一个就是让指针的地址不能被修改 但是变量可以修改 const在*后

1998. const和define的区别

参考博客

预处理相关知识

回答


我们都知道函数生成的过程有下面四个阶段嘛 预处理 编译 汇编 链接

而define主要是在预处理阶段生效的 他只是进行一个简单的替换

而const则是定义了具有常属性的变量

一般来说 如果我们需要一个常量值在全局定义的话 我们一般使用const 更加的安全

相关文章:

  • C++11中引入的比较常用的新特性讲解(上)
  • 如何改掉经常说“然后”、“就是”、“嗯”的毛病
  • 解决Compose编译报错问题 couldn‘t find inline method Landroidx/compose/...
  • arm对应hex_ASCII与HEX对照转换表
  • 程序化广告行业(34/89):移动端特色广告与创意策略探秘
  • Uncert-CoT: 计算不确定性判断是否启用CoT
  • Slidev使用(一)安装
  • MySQL的sql语句后/G是什么作用?
  • Mysql增删改查
  • 怎样实现CAN数据的接收和发送?
  • 基于Python的3D贴图制作技术研究与实践
  • 数据库基础知识点(系列五)
  • 深入了解 Git Merge:用法、类型与合并冲突处理
  • GPT Researcher 的win docker安装攻略
  • Postman 下载文件指南:如何请求 Excel/PDF 文件?
  • 递归、搜索与回溯第四讲:floodfill算法
  • ​macro-F1(宏平均F1)​和micro-F1(微平均F1)
  • 在kali linux中配置hive(mysql元数据库)
  • 现阶段高校的人工智能方案培训如何?
  • MVC基础概念及相应代码示例
  • 叙利亚政权领导人首访西方国家,与法国总统讨论叙局势
  • 现场|万米云端,遇见上博
  • “80后”海南琼海市长傅晟,去向公布
  • 印媒证实:至少3架印军战机7日在印控克什米尔地区坠毁
  • 刘诚宇、杨皓宇进球背后,是申花本土球员带着外援踢的无奈
  • 想要“逆转”糖尿病,减少这两处脂肪是关键