c/c++面试100道

1.一道笔试题解析_哔哩哔哩_bilibili

P20:#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)

1、

offsetof 宏是 C 语言中用于计算结构体成员相对于结构体起始地址的偏移量的宏定义。这个宏的定义如下:

#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)

这个宏定义的工作原理如下:

  1. TYPE* 是一个指向 TYPE 结构体的指针。
  2. (TYPE*)0 将整数 0 转换为 TYPE 类型的指针。这里 0 是一个空指针常量,转换成 TYPE 类型的指针后,它指向的是结构体的起始地址。
  3. ((TYPE*)0)->MEMBER 使用箭头操作符 -> 访问结构体的成员 MEMBER。由于 TYPE* 指针指向地址 0,这实际上是在计算 MEMBER 在 TYPE 结构体中的偏移量。
  4. (size_t)&((TYPE*)0)->MEMBER 取 MEMBER 成员的地址并强制转换为 size_t 类型,这样得出的就是 MEMBER 相对于结构体起始地址的偏移量。

通过这个宏,你可以在运行时获取结构体成员的偏移量,这对于编写低级代码或者处理结构体布局非常有用。

size_t:

size_t 是一种无符号整数类型,用于表示对象的大小和内存地址。它是标准 C 库中的一种类型,size_t 的大小取决于平台的架构(32 位或 64 位),并且它能存储最大的内存地址值,因此它通常与平台的指针大小匹配。在 32 位系统中,size_t 通常是 4 字节(32 位),在 64 位系统中,通常是 8 字节(64 位)。

X86和X64的区别:

X86指的是支持32位的指令集架构处理器,最初由英特尔在1978年发布的 intel 8086,这个系统主要为X86结尾所以简称X86,而X86有16位和32位,现今大多数用的是32位处理器。

X64指的是支持64位的指令集架构处理器,最初由AMD在2003年发布的AMD 64 支持64位的处理器由来,后续英特尔为了支持X64所以也推出 intel X64。

联合体和结构都要做数据对齐,对齐的位数取决于系统是32位还是64位

32位默认操作的最小单元是4个字节,64位默认操作的最小单元是8个字节

这里在代码前加上#pragma pack(4)  

可以实现强制4字节对齐

P21:const

在c中也可以这样间接的修改const变量的值

用const修饰形参的时候,不能更改它修饰的值:

以下函数定义是会报错的

P22:fork()

#include <stdio.h>
#include <unistd.h>

int main() {
    fork() || fork();
    printf("Hello ");
    return 0;
}

分析:
最初的进程(P0)调用第一个fork()。这会创建一个子进程(P1)。

P0: 第一个fork()返回非0(父进程的返回值),所以fork()的结果为真,fork()后的第二个fork()不会执行。
P1: 第一个fork()返回0(子进程的返回值),所以fork()后的第二个fork()会执行。
P1调用第二个fork(),创建另一个子进程(P2)。

P1: 第二个fork()的结果返回非0,执行printf("Hello ")。
P2: 第二个fork()返回0,执行printf("Hello ")。
总结
P0: 执行printf("Hello ")。
P1: 执行printf("Hello ")。
P2: 执行printf("Hello ")。
总共有3个进程执行printf("Hello "),所以最终输出"Hello "三次。

P23:指针引用

P24:调用几次构造函数

C++中的class的应用_c++ class用法-CSDN博客

疑问:C++的string类 和 class的关系是什么?

答疑:C++的string类和class的关系在于string是一个具体的类,而class是定义类的关键字。string类是C++标准库中的一部分,它是一个封装了字符串操作的类,提供了许多功能,比如动态管理字符串内存、字符串拼接、查找等。而class是用来定义自定义类型的工具,可以用来创建自己的类,包括string这样已有的类。简单来说,string是通过class定义的。

疑问:C++中struct和class的区别

有一点特殊的是,当class定义时,如果没有string name这种复杂的定义则其他简单定义就不会初始化

题目:

这里MyClass a[4] 创建了4个类的对象,所以执行了四次构造函数

这里MyClass *p[5] 创建了5个指向类的对象的指针,因为只是指向类对象的指针所以并没有创建对象,所以不会执行构造函数

P25:求二进制值中1的个数

P26:判断一个数是否是2的n次方

P27运算重载函数:

P29:变量置位,清零操作

P30:sizeof运算符中的表达式:

sizeof(i++);//这个表达式不会把i++后的值赋给i,因为它是运算符,不是函数,它只会判断计算完的值是什么类型,不会去赋值

P31:指针+整数

0x801000是整形常量,而P1和P2是指针,他们类型不匹配,编译器一定会报错,所以我们需要在前面加上指针类型转换。

32位系统与64位系统各数据类型所占空间大小_32位系统和64位系统下数据类型的占用空间相同吗-CSDN博客

P32 volatile关键字:

P33 c++中空类占用的内存大小

不管是不是空类,所有类都可以实例化(就是分配内存空间)

在空类中会隐含的添加一个字节

P34:如果a是一个数组,那&a和a的区别是什么

&a相当于一个二级指针,&a+1相当于加了5(int *)

P35:如何不使用第三个变量来交换两个变量的值:

方法一:

方法二:

记忆方法:永远是三个a^b,前面的被赋值数永远是两个夹一个

技巧:2夹1,三异或

P36:运算符优先级

C语言运算符优先级(超详细)_c语言优先级-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript模块化——ES6模块化规范

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;vscode Chrome浏览器 1.ES6 1.1ES6介绍 ES6的全称是ECMAScript 6&#xff0c;也称为ES2015&#xff0c;是JavaScript的一个重要版本&#xff0c;它引入了许多新特性和改进&#xf…

Linux搭建邮箱服务器(简易版)

本章是上一文档的简易版本搭建方式更为快速简洁&#xff08;只需要两条命令即可搭建&#xff09;&#xff0c;如果想了解更详细一些可以看我上一文档 Linux接发邮件mailx_linux mailx o365-CSDN博客文章浏览阅读857次&#xff0c;点赞25次&#xff0c;收藏19次。本文详细描述了…

独立站内容营销SOP 1.0 丨出海笔记

提到内容营销&#xff0c;可能很多朋友都听过但没深入做&#xff0c;国内跨境独立站通过内容营销做的大流量的目前不多&#xff0c;哪怕大如 Shein, Anker&#xff0c;大部分时候还是在买量获客的阶段。 但大家只要明白一点即可&#xff1a;内容做得好不好&#xff0c;直接影响…

文档智能:OCR+Rocketqa+layoutxlm

此次先记录LayoutLMv2&#xff0c;梳理相关论文&#xff0c;记录如下&#xff1a; 首先认识一下 visually-rich document understanding tasks → \to → VrDU 其次&#xff0c;the text fields of interest&#xff0c;与图像识别的感兴趣区域 region of Interest 类似&…

【脑机接口】脑机接口性能的电压波形的尖峰分类和阈值比较

Comparison of spike sorting and thresholding of voltage waveforms for intracortical brain–machine interface performance 脑机接口性能的电压波形的尖峰分类和阈值比较论文下载&#xff1a;摘要1 介绍2 方法2.1数据获取2.2spike sorting 技术2.3神经数据分析 3结果3.1神…

社交媒体的未来:Facebook如何通过AI技术引领潮流

在数字化时代的浪潮中&#xff0c;社交媒体平台不断演变&#xff0c;以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台&#xff0c;Facebook在这一进程中扮演了重要角色。尤其是人工智能&#xff08;AI&#xff09;技术的应用&#xff0c;正在深刻地改变Facebook的…

搜索树和Map

一.搜索树 1.概念 二叉搜索树又叫二叉排序树&#xff0c;它可以是一颗空树也可以是具有以下性质的二叉树 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左子树也分别为二…

NR intra-freq和inter-freq测量

intra-freq 测量和inter-freq测量可以分为以下几类&#xff1a; 1 SSB based intra-freq 测量&#xff1a;serving cell SSB的center freq与邻区 SSB的center freq 相同并且两个SSB 的SCS也相同。 2 SSB based inter-freq 测量&#xff1a;serving cell SSB的center freq与邻…

用Qt 对接‌百度语音识别接口

一 、前期准备工作 1&#xff0c;搭建好开发环境&#xff1b; 2&#xff0c;注册百度云平台&#xff0c;获取语音相关东西&#xff0c; 短语音识别标准版_短语音识别-百度AI开放平台 (baidu.com) 3&#xff0c;涉及到的Qt 类有 QAudioFormat&#xff0c;QAudioDeviceInfo&a…

【HarmonyOS NEXT开发】如何设置水平/垂直方向的左/居中/右对齐——RelativeContainer的AlignRules设置

文章目录 【HarmonyOS NEXT开发】如何设置水平/垂直方向的左/居中/右对齐——RelativeContainer的AlignRules设置RelativeContainer 和 AlignRules 的关系AlignRules 语法详解 【HarmonyOS NEXT开发】如何设置水平/垂直方向的左/居中/右对齐——RelativeContainer的AlignRules设…

Cesium 展示——Cesium 初始化视角在中国并加载数据(china.json)

文章目录 需求一:初始化视角在中国分析需求二:加载中国数据(china.json)需求一:初始化视角在中国 在初始化 Cesium 的 Viewer 后,视角是在美国,如何让其视角指向中国 分析 viewer.value = new Cesium.Viewer(cesiumContainer.value, {homeButton

Linux通配符*、man 、cp、mv、echo、cat、more、less、head、tail、等指令、管道 | 、指令的本质 等的介绍

文章目录 前言一、Linux通配符*二、man 指令三、 cp 指令四、mv指令五、 echo 指令六、cat 指令七、more 指令八、 less 指令九、 head 指令十、 tail指令十一、 管道 |十二、指令的本质总结 前言 Linux通配符*、man 、cp、mv、echo、cat、more、less、head、tail、等指令、管…

如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)

前言 在深度学习模型推理中,使用 GPU 进行加速是提升模型推理速度的关键方式之一。 本文将带大家一步步了解如何使用 ONNX Runtime 结合 NVIDIA 的 CUDA 和 cuDNN 进行 GPU 加速。 一、查找ONNX、CUDA与cuDNN之间的对应版本 首先,我们需要确保 ONNX Runtime 与 CUDA 和 cu…

分类预测|基于差分优化DE-支持向量机数据分类预测完整Matlab程序 DE-SVM

分类预测|基于差分优化DE-支持向量机数据分类预测完整Matlab程序 DE-SVM 文章目录 一、基本原理DE-SVM 分类预测原理和流程总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 DE-SVM 分类预测原理和流程 1. 差分进化优化算法&#xff08;DE&#xff09; 原理…

用于安全研究的 Elastic Container Project

作者&#xff1a;来自 Elastic Andrew Pease•Colson Wilhoit•Derek Ditch 使用 Docker 启动 Elastic Stack 序言 Elastic Stack 是一个模块化数据分析生态系统。虽然这允许工程灵活性&#xff0c;但建立开发实例进行测试可能很麻烦。建立 Elastic Stack 的最简单方法是使用…

【LLM text2sql】浅看大模型用于text2sql的综述

前言 之前笔者分享了text2sql & LLM & KG的有机结合实现KBQA的问答&#xff0c; 《【LLM & RAG & text2sql】大模型在知识图谱问答上的核心算法详细思路及实践》、 《【开源分享】KBQA核心技术及结合大模型SPARQL查询生成问答实践》。 我们再来看看大模型在te…

Axure RP实战:打造高效图形旋转验证码

Axure RP实战&#xff1a;打造高效图形旋转验证码 在数字产品设计的海洋中&#xff0c;验证码环节往往是用户交互体验的细微之处&#xff0c;却承载着验证用户身份的重要任务。 传统的文本验证码虽然简单直接&#xff0c;但随着用户需求的提高和设计趋势的发展&#xff0c;它…

【人工智能】OpenAI最新发布的GPT-o1模型,和GPT-4o到底哪个更强?最新分析结果就在这里!

在人工智能的快速发展中&#xff0c;OpenAI的每一次新模型发布都引发了广泛的关注与讨论。2023年9月13日&#xff0c;OpenAI正式推出了名为o1的新模型&#xff0c;这一模型不仅是其系列“推理”模型中的首个代表&#xff0c;更是朝着类人人工智能迈进的重要一步。本文将综合分析…

详细分析linux中的MySql跳过密码验证以及Bug(图文)

目录 1.问题所示2. 基本知识3. 解决方法3.1 跳过验证Bug3.2 设定初始密码 1.问题所示 发现密码验证错误&#xff0c;遗失密码 2. 基本知识 停止MySQL服务&#xff1a;sudo systemctl stop mysql 以跳过权限表模式启动MySQL&#xff1a;sudo mysqld_safe --skip-grant-tables …

vulnhub靶机:Holynix: v1

下载 下载地址&#xff1a;https://www.vulnhub.com/entry/holynix-v1,20/ 打开虚拟机 选择下载解压之后的文件打开 新添加一张 NAT 网卡&#xff0c;mac 地址修改如下 00:0c:29:bc:05:de 给原来的桥接网卡&#xff0c;随机生成一个 mac 地址 然后重启虚拟机 信息收集 主…