c++面试知识点补充

2023-10-26

1.说说c++结构体和c结构体的区别
(1)c的结构体内不允许有函数存在,c++允许有内部成员函数,且允许该函数是虚函数。
(2)c的结构体对内部成员变量的访问权限只能是public,而c++允许public,protected,
private三种。
(3)c的结构体是不可以继承的,c++的结构体是可以从其他的结构体或者类继承过来的。
(4)c中使用结构体需要加上struct关键字,而c++可以省略struct关键字直接使用。
2.导入c函数的关键字是什么,c++编译时和c有什么不同?
(1)关键字:在c++中,导入c函数的关键字是extern,表达形式为extern “C”,主要作用:正确
实现c++代码调用其他c语言代码。
(2)编译区别:由于c++支持函数重载,因此编译器函数的过程中会将函数的函数的参数类型
也加到编译后的代码中,而不仅是函数名;因c语言不支持函数重载,因此编译c语言代码时
不会带上函数的参数类型,只包含函数名。
代码:
//extern示例 
//在C++程序里边声明该函数,会指示编译器这部分代码按C语言的进行编译 
extern "C" int strcmp(const char *s1, const char *s2); 
 //在C++程序里边声明该函数 
 extern "C"{  
    #include <string.h>
    //string.h里边包含了要调用的C函数的声明 
    } 
     //两种不同的语言,有着不同的编译规则,比如一个函数fun,
     //可能C语言编译的时候为_fun,而C++则是__fun__
3.c++从代码到可执行文件过程:
分为四个过程:预编译,编码,汇编,链接
(1).预编译:
a.将所有的#define删除,且展开所有的宏定义;
b.处理所有的条件预编译指令,如#if.#ifdef;
c.处理#include预编译指令,将包含的文件插入到该预编译指令的位置;
d.过滤所有的注释;
e.添加行号和文件名标识;

(2)编译:生成汇编代码
(3)汇编:将汇编代码转变成机器可以执行的指令;
(4)链接:将不同源文件产生的目标文件进行链接,从而形成可执行程序。
链接分为静态链接和动态链接。
静态:在链接时把调用的函数或者过程链接到了生成的可执行文件中,就算删除静态库也不会
影响可执行程序的执行。生成的静态链接库,windows下以.lib为后缀,linux下以.a后缀。

动态:在链接时没有把调用的函数代码链接进去,而是在执行过程中,再去找链接的函数,生成的可执行文件中没有函数
代码,只包含函数的重定位信息,当删除动态库时,可执行程序就不能运行。生成的动态库链接,windows下以.dll为后缀,
linux下以.so为后缀。
4.野指针
概念:指向的指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)。
原因:释放内存后指针不及时置空,还是指向该内存,可能出现非法访问的错误。
避免:初始化置null,申请内存后判空,指针释放后置null,使用智能指针。
1.c++内存
堆和栈区别:
(1)堆栈空间分配不同。栈由操作系统自动分配释放,存放函数的参数值,局部变量等;堆由程序员分配释放。
(2)堆栈缓存方式不同。栈使用一级缓存,通常被调用时处于存储空间中,调用完毕立即释放;
堆则是存放在二级缓存中,速度要慢些。
(3)堆栈数据结构不同。堆类似于数组结构;栈类似于栈结构,先进后出。
2.c++内存管理
(1)分配方式:
分为5个区,分别:堆,栈,自由存储区,全局/静态存储区和常量存储区。
栈:执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束会自动被释放。
堆:由new分配的内存块,一般一个new对应一个delete.
自由存储区:由malloc等分配,和堆相似,不过用free来结束自己
全局/静态存储区:全局变量和静态变量被分配到同一块内存中
常量存储区:比较特殊,存放的是常量,不允许修改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++面试知识点补充 的相关文章

随机推荐

  • ReentrantLock 源码分析

    ReentrantLock简单使用demo如下 Lock lock new ReentrantLock lock lock try 业务逻辑 finally lock unlock 注 获取的锁代码要放到try块之外 防止获得锁代码异常 抛
  • Chrome开发者工具详解

    Chrome开发者工具详解 1 Elements Console Sources面板 Chrome开发者工具面板 面板上包含了Elements面板 Console面板 Sources面板 Network面板 Timeline面板 Profi
  • adb MacBook Pro上使用adb命令:Command not found或者每次使用前要source .bash_profile文件

    前言 adb MacBook Pro上使用adb命令报错 Command not found 或者每次使用前要source bash profile文件 一 解决问题1 在根路径配置 bash profile文件 如果没有 touch ba
  • python-面向对象基础-类属性&实例属性-构造&析构

    一 类的定义 class 类名 类体 class Person object pass 二 类中成员的定义 class Person object 属性 name tom age 18 height 180 方法 def eat self
  • C++堆和栈的区别和联系

    2017年09月16日 10 39 33 阅读数 1605 参考博客地址 http blog csdn net hairetz article details 4141043 http blog csdn net handsomesunsh
  • C#学习之ASP.NET概述

    ASP NET的应用 网络应用程序开发 学习ASP NET的优势 易学 设计人员和后台代码人员专注于自己的工作 原因 ASP NET将HTML页面代码和脚本代码分离 高效地创建大规模的网络应用程序 背景 自从互联网的出现 各种网络开发技术层
  • 关于ehcache使用rmi方式实现分布式缓存时遇到的问题

    业务场景 一个架构较老的系统 由于在正式环境中需要搭建集群环境 目前使用echcache来作为缓存 为了减少代码修改 使用了RMI方式来实现集群 使用了被动发现和注册的方式 配置如下
  • Ansible Lookup

    1 文件内容的读取 hosts all vars contents lookup file etc foo txt tasks debug msg the value of foo txt is contents Note 切记读取的是本地
  • 使用gpt绘制奥特曼

    public class Ultraman extends JPanel public void paint Graphics g Color silver new Color 192 192 192 画头 g setColor Color
  • C语言顺序表中删除值为x的元素

    要求时间复杂度为O n 空间复杂度为O 1 实现代码如下 删除线性表中为x的元素 void deleteX SqList L int x int k 0 for i 0 i
  • 全球及中国工业互联网产业运行态势与布局状况调研报告2022-2028年

    全球及中国工业互联网产业运行态势与布局状况调研报告2022 2028年 修订日期 2022年4月 出版单位 鸿晟信合研究院 对接人员 周文文 报告价格 纸质版6500元 电子版6800元 纸质 电子版7000元 有折扣 内容部分有删减 了解
  • 1、网络隧道技术

    网络隧道技术简介 隧道技术 Tunneling 是一类网络协议 它是一种数据包封装技术 它将原始IP包 其报头包含原始发送者和最终目的地 封装在另外一个数据包 称为封装的IP包 的数据净荷中进行传输 使用隧道的原因是在不兼容的网络上传输数据
  • CVE20190708复现

    一 实验环境 基于虚拟机运行 VMware 1 靶机 ip 192 168 8 2 测试机 192 168 8 3 将两个虚拟机设置于同一个网段中 a 在虚拟网络编辑器中 将VMnet0采用桥接模式 并桥接到网线网上 b 设置win7为动态
  • 动态规划浅析

    leetcode53 最大子序和 leetcode62 不同路径 leetcode300 最长递增子序列 动态规划要解决的都是一些问题的最优解 即从很多解决问题的方案中找到最优的一个 当我们在求一个问题最优解的时候 如果可以把这个问题分解成
  • npm install 错误 安装 chromedriver 失败的解决办法

    npm 安装 chromedriver 失败的解决办法 npm 安装 chromedriver 时 偶尔会出错 错误提示类似于 npm ERR chromedriver 2 35 0 install node install js 经分析发
  • cicd 07--构建前后端一体化自动化发布流程

    cicd 07 构建前后端一体化自动化发布流程 1 介绍 2 构建过程 2 1 功能说明 2 2 jenkins gitlab 配置 2 3 测试结果 3 注意事项 4 说明 1 介绍 cicd 04 构建自动化发布流程 介绍了一种通用的自
  • NLP扎实基础3:TF-IDF文本特征提取

    TF IDF简介 TF IDF使用流程 见上图 步骤如下 根据全部语料每个词对应的TF IDF值 每个句子对应全部语料的one hot编码 将TF IDF编码作为特征 Python代码 流程很简单 就不复现了 这里有两个使用的方式 第一种是
  • Flutter中如何强制某个页面横屏

    在很多文章中 提到了Flutter中强制某个页面横屏使用如下代码 SystemChrome setPreferredOrientations DeviceOrientation portraitUp DeviceOrientation po
  • 零基础学员的shell脚本的写作思路详解

    前言 这两天一直再批改学员的脚本作业 大多数学员写的很好 有的学员写的不太好 还有一些还没有入门到学员不知道脚本该咋写 不知道脚本怎么写的学员 绝大多数犯了一个错误 一上来就把脚本想的太复杂了 我们今天单独聊聊这个问题 脚本错误范例示范 写
  • c++面试知识点补充

    1 说说c 结构体和c结构体的区别 1 c的结构体内不允许有函数存在 c 允许有内部成员函数 且允许该函数是虚函数 2 c的结构体对内部成员变量的访问权限只能是public 而c 允许public protected private三种 3