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

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

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. 引用被创建后不能被修改 但是指针可以修改

相关文章:

  • jQuery 入门案例教程
  • Ubuntu系统Docker安装失败
  • VUE如何前端控制及动态路由详细讲解
  • 日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习(3号通知)
  • idea自动生成注释
  • 传奇类网游页游2.5D游戏场景地图素材Eagle库 沙漠沙海隔壁
  • Visual Studio | 性能探测器
  • Vscode 更换插件下载位置
  • 相机租赁网站基于Spring Boot SSM
  • 数据处理专题(四)
  • Java基础概念汇总
  • JavaScript 学习笔记
  • 【Yolov8部署】 VS2019+opencv-dnn CPU环境下部署目标检测模型
  • MyBatis--简单测试
  • arinc818 fpga单色图像传输ip
  • MySQL DQL,数据查询语言的用法
  • 小智机器人关键函数解析,Application::OutputAudio()处理音频数据的输出的函数
  • Unity LOD Group动态精度切换算法(基于视锥+运动速度)技术详解
  • 若依管理系统前后端不分离本地运行新手教学
  • 私域流量池的智能裂变:技术驱动下的流量融合新范式
  • 池州网站优化公司/网络营销的目的是什么
  • 越烽建设集团有限公司网站/谷歌广告投放步骤
  • 来个网站急急急2021年/厦门人才网官方网站
  • 建立网站 英语怎么说/百度教育官网
  • 银川住房城乡建设委官方网站/关键词点击工具
  • 销售网站建设怎么做/佛山网站设计实力乐云seo