C++初阶知识复习 (31~45)

ops/2025/4/2 3:57:22/

C++ 初阶总复习 (31~45)

    • 目的
      • 31. 2037. C++中函数模板和类模板的区别
      • 32. 2039. C++中strcpy和memcpy的区别
      • 33. 2041. 堆内存和栈内存的区别
      • 34. 2042. 栈溢出是什么?
      • 35. 2043.回调函数
      • 36. 2044. C++中为什么使用nullptr而不使用null
      • 37. 2045. 什么是大端序 什么是小端序
      • 38. 2046. C++中的include<> 和include " " 有什么区别
      • 39. 2047. C++中是否可以include源文件
      • 40. 2048. 什么是深拷贝 什么是浅拷贝
      • 41. 2049.C++中的命名空间有什么用
      • 42. 2050.C++中的友元类和友元函数有什么作用
      • 43. 2051.C++中如何涉及一个线程安全的类
      • 44. 2052. C++如何调用C语言的库
      • 45. 指针和引用的区别

目的

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

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

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

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

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

31. 2037. C++中函数模板和类模板的区别

参考博客

模板进阶

回答


他们的主要区别在于实例化方式和用法上

  1. 在使用函数模板的时候 我们无需实例化 直接传入参数即可
  2. 在使用类模板 我们需要显示的声明模板类型

此外函数模板在使用时实例化 类模板在显示指定时实例化


什么是非类型模板参数

非类型模板参数是使用常量作为模板的一个参数

我们可以用它来指定静态数组的大小

32. 2039. C++中strcpy和memcpy的区别

回答


他们的主要区别是

  1. strcpy主要是用于字符串之间的拷贝 它以 /0 作为终止位置
  2. memcpy能够拷贝任意类型的数据

33. 2041. 堆内存和栈内存的区别

回答


他们之前的区别主要在于下面几个方面

  1. 地址增长 栈向下增长 堆向上增长
  2. 生命周期 堆的声明周期如果不主动释放 一直到程序结束 栈的生命周期则随着作用域的消失而结束
  3. 性能 栈的性能要优于堆的性能
  4. 管理方式 栈由编译器自动管理 而堆由程序员手动管理

34. 2042. 栈溢出是什么?

参考博客

函数栈帧

回答


从上面的博客中我们可以知道 当我们每次函数调用的时候都会开辟出一块新的栈空间出来

但是栈空间肯定不是无限的啊

如果说我们写了一个无限递归的函数 或者说递归次数很多的函数 栈空间承受不住了 就会出现栈溢出的现象

35. 2043.回调函数

指针进阶

回调函数是通过函数指针或者函数对象将一个函数作为参数传递给另一个函数的机制

它让我们能够优化代码 解耦

并且实现异步编程 让我们的主程序不必停留

36. 2044. C++中为什么使用nullptr而不使用null

参考博客

C++11的新特性

回答


因为在C语言中 NULL即是0 比如说我们设置重载函数 一个参数是int 一个参数是in *

如果输入的是NULL 那么我们是期望出现哪种结果呢?

所以说为了解决这个问题 我们就引入了nullptr 这样就不会出现歧义了

37. 2045. 什么是大端序 什么是小端序

参考博客

大端法和小端法


大端法就是数据的高字节保存在低地址中

小端法就是数据的低字节保存在地址中

比如说一个数字 0x 12 34 56 78

12 34 56 78 这就是大端 反之则是小端

38. 2046. C++中的include<> 和include " " 有什么区别

include是包含头文件

使用尖括号是从系统执行的路径中寻找头文件

而使用 ” “则是从当前路径下寻找 或者是从以当前路径为起点的相对路径中寻找

39. 2047. C++中是否可以include源文件

回答


可以 因为include的本质实际上就是将其他文件内的所有数据展开到当前文件下 (这里可以联系到预处理的作用 ) 在预处理阶段生效

40. 2048. 什么是深拷贝 什么是浅拷贝

参考博客

深拷贝和浅拷贝

回答


浅拷贝主要是只是简单的拷贝数值 不考虑对象管理的空间资源 比如说对象其实用指针管理者一块内存 如果使用浅拷贝 它就只会把指针的地址拷贝下

而深拷贝则会创建出一块和原来内存一样大的新内存出来

41. 2049.C++中的命名空间有什么用

参考博客

初识C++

回答


命名空间主要是用来解决命名冲突的问题 当我们的一个项目较大的时候难免会出现命名冲突的现象 如果出现了这样的现象就会出现编译不过的问题

此时我们就只需要定义一个命名空间就可以了

42. 2050.C++中的友元类和友元函数有什么作用

参考博客

友元函数

作用


主要是允许函数和类访问当前类的私有和保护的成员变量 (注意不能使用函数)

使用场景 当我们要使用多个类的私有成员的时候

class Box; // 前向声明class Item {
private:int weight;
public:friend int calculateTotalWeight(const Item&, const Box&);
};class Box {
private:int boxWeight;
public:friend int calculateTotalWeight(const Item&, const Box&);
};// 友元函数可以访问 Item 和 Box 的私有成员
int calculateTotalWeight(const Item& i, const Box& b) {return i.weight + b.boxWeight;
}

43. 2051.C++中如何涉及一个线程安全的类

参考博客

C++多线程相关

回答


涉及到线程安全我们就需要加锁了 在涉及临界资源的时候加锁 在最后接锁即可

void func(int n , int& x)
{for (int i = 0; i < n; i++){mtx.lock();cout << this_thread::get_id() << " : " << i << endl;x++;mtx.unlock();}}int main()
{int x = 0;thread t1 = thread(func, 10,  ref(x));thread t2 = thread(func, 10,  ref(x));t1.join();t2.join();cout << x << endl;return 0;
}

44. 2052. C++如何调用C语言的库

回答


主要有下面集中方式

  1. extern “C”
  2. 修改makefile文件 g++ 变成gcc
  3. 修改文件的后缀.cpp变成.c

45. 指针和引用的区别

参考博客

初识C++

回答


  1. 引用的底层是指针
  2. 引用必须要初始化 而指针可以不初始化
  3. 引用不能指空 但是指针可以指向nullptr
  4. 引用被创建后不能被修改 但是指针可以修改

http://www.ppmy.cn/ops/171250.html

相关文章

USB详解

应用范围 USB 拓扑结构 USB 逻辑部分 USB供电方式 USB 配置描述符 USB 挂起模式 USB总线信号 USB 设备的插入检测和速度检测 连接和断开连接 数据编解码和位填充 USB传输 Packet 的组成 Packet 的内容 Pack内容之PID域 Pack内容之地址域 Pack内容之帧号域 Packet 内容之数据域 …

微信小程序:数据拼接方法

1. 使用 concat() 方法拼接数组 // 在原有数组基础上拼接新数组 Page({data: {originalArray: [1, 2, 3]},appendData() {const newData [4, 5, 6];const combinedArray this.data.originalArray.concat(newData);this.setData({originalArray: combinedArray});} }) 2. 使…

详解数据结构之树、二叉树、二叉搜索树详解 C++实现

树 树是n &#xff08; n>0 &#xff09;个结点的有限集。n0时称为空树。在任意一棵非空树中&#xff1a; 有且仅有一个特定的称为根&#xff08;Root&#xff09;的结点&#xff1b;当n>1时&#xff0c;其余结点可分为m &#xff08;m>0&#xff09;个互不相交的有…

Django之旅:第六节--mysql数据库操作增删改查(二)

前提条件(models.py已经设置好&#xff09;&#xff1a; from django.db import mmodelsclass UserInfo(models.Model):namemodels.CharFIeld(max_length32)passwordmodels.CharFIeld(max_length64)#agemodels.IntegerFIeld()操作数据语法&#xff08;在views.py文件&#xff0…

鸿蒙生态圈暗战:数字孪生三强争霸谁将主宰消费电子未来?

IDC数据显示&#xff0c;2025年Q1华为以38.7%份额领跑中国折叠屏市场&#xff0c;Pura X首月销量突破120万台。这款搭载HarmonyOS 5的旗舰&#xff0c;通过灵犀通信技术实现5G A网络下载速率提升30%&#xff0c;并在离线环境下完成厘米级导航。其爆款逻辑背后&#xff0c;是鸿蒙…

Gossip协议:分布式系统中的“八卦”传播艺术

目录 一、 什么是Gossip协议&#xff1f;二、 Gossip协议的应用 &#x1f4a1;三、 Gossip协议消息传播模式详解 &#x1f4da;四、 Gossip协议的优缺点五、 总结&#xff1a; &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&…

2024华为OD机试真题-最大矩阵和(C++/Java/Python)-E卷-100分

目录 题目描述 输入描述 输出描述 用例1 考点 解题思路 代码 c++ python java 2024华为OD机试题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 题目描述 给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和…

HarmonyOS(扩展篇四):工业互联网操作系统

HarmonyOS&#xff08;扩展篇四&#xff09;&#xff1a;工业互联网操作系统 一、实时工业控制协议 1.1 协议性能对比 协议标准循环周期抖动控制节点容量典型应用场景EtherCAT≤1ms1μs65535高精度运动控制PROFINET IRT1-10ms1μs256汽车装配线OPC UA TSN10-100ms50μs无限制…