《程序员面试宝典》第6章 宏和const

2023-10-27

(一)用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量

        {

        int a;

        char b[20];

        double cc;

        }

        FIND(student,a);   //0

        FIND(student,b);   //4

        FIND(student,cc);   //4+20

    

       解题:

             #define FIND(struc,e)   (size_t)&(((struc*)0)->e)

             其中(struc*)0表示将常量0强制转化为struc *型指针所指向的地址;

              &(((struc*)0)->e):取结构体(struc*)0成员e的地址。因该结构体的首地址是0,所以其实就是得到了成员e距离结构体首地址的偏移量。

             (size_t)是一种数据类型,最好定义为一种无符号型数据,一般为unsigned int ,便于不同系统之间之间移植。


(二)关于宏的考题

      【1】   #define Second_per_year   (60*60*24*365)UL         //UL为无符号长整型,以防整型数溢出 

      【2】   #define  MIN(A,B)   ((A)<=(B)?(A):(B))


(三)const 

       【1】用途:(1)可以定义const常量

                             (2)可以修饰函数的参数和返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以防止意外的变动。





#include <iostream>
#include <iomanip>
using namespace std;
class C
{
public:
C(int i):m_Count(i){}
int incr() const
{
return ++m_Count;
}

int  decr() const
{
return --m_Count;
}
private:
mutable int m_Count;
};
int main()
{
C c1(0),c2(10);
for(int tmp,i=0;i<10;i++)
{
tmp=c1.incr();
cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;


tmp=c2.decr();
cout<<setw(tmp)<<setfill(' ')<<tmp<<endl;
}
return 0;
}


在const成员函数中,用mutable修饰成员变量名后,就可以修改类的成员变量了

以下为上面的代码运行结果










本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《程序员面试宝典》第6章 宏和const 的相关文章

  • 烽火星空- 笔试

    烽火星空笔试 Java结合数据结构进行出题 无任何网络知识 无任何操作系统知识 无任何框架知识 Collection除外 选择题 Java结合数据结构 没有Java基础知识 全部结合数据结构 数据结构占比60 Java 40 链表占比极高
  • 程切换问题

    处理器总处于以下状态中的一种 内核态 运行于进程上下文 内核代表进程运行于内核空间 内核态 运行于中断上下文 内核代表硬件运行于内核空间 用户态 运行于用户空间 一个进程的上下文可以分为三个部分 用户级上下文 寄存器上下文以及系统级上下文
  • 《程序员面试宝典》第6章 宏和const

    一 用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量 int a char b 20 double cc FIND student a 0 FIND student b 4 FIND student cc 4 20
  • 一些笔试题笔记1

    总结一些常见的笔试题 最小公约数和最大公倍数 这个其实很简单 记住概念就可以了 我们利用辗转相除法计算 最大公约数 摘自百度百科 一般地 如果求a和b的最大公约数 a gt b 那么 当时 得 这里表示b整除a 而表示b不能整除 当时 设余
  • 面试常见的八股文记录

    本文是记录平常看到的面试八股文问题 其问题主要是从leetcode中的讨论区整理出来的 答案大多是参考一些大佬讲解来整理的 在此进行整理 方便大家换工作时来熟悉下常见的八股文问题 大家可以看看 也可以讨论下 2021 05 10 微信 后端
  • 硬件工程师笔试题——21大疆秋招

    给志同道合者 成长的方向 鄙人不才 答案有误 三思 三思
  • 网易笔试的一道题

    写一个程序 打印出以下的序列 a b c d e z a b a c a d a e a z b c b d b z c d y z a b c a b d a b z a c d x y z a b c d x y z const cha
  • 五大浏览器对应的内核

    写这个文章是为了让自己容易快速找到 简单粗暴 3 晴天雨天不如前端在身边 各浏览器对应的内核 谷歌 Webkit gt blink 现在是blink啦 FireFox Gecko safari webkit opera presto IE
  • 阿里巴巴一道笔试题

    其实这是谷歌的一道面试题 给定能随机生成整数1到5的函数 写出能随机生成整数1到7的函数 惭愧 阿里的笔试题做错了 说实话 以前没见过 见过了就把搞懂 阿里题目 给定rand 7 表示能生成1 7的随机数 使用四则运算和循环等控制语句 可以
  • DFS 相关例题

    会顶科技 两道 第一行为一个整数N 用来表示球的个数 第二行为一个整数M 用来表示桶的个数 从第三行到第N 2行 每行有M个整数 这些整数要么为0 要么为1 输出描述 输出为一个整数 输出1代表可以放入所有的球 输出0代表无法放入所有的球
  • 区别对象和数组的方法

    区别对象和数组的方法 1 constructor var obj obj constructor object constructor Array 2 obj instanceof Array true 就是数组 false 就是对象 A
  • 搜狐2012年校园招聘会笔试题解析

    一 不定项选择题 1 以下程序的打印结果是 cpp view plain copy include
  • 绕懵逼之同步/异步 阻塞/非阻塞

    被面试官绕蒙蔽了 特此整理总结一下 1概念解析 1 1 同步与异步概念描述 同步异步概念与消息的通知机制有关 所谓同步就是一个任务的完成需要依赖另外一个任务时 只有等待被依赖的任务完成后 依赖的任务才能算完成 这是一种可靠的任务序列 要么成
  • Linux 查看java进程的命令

    刚才去了微众税银面试 面试官赶时间 导致我的语速也快了起来 其中有个问题没答上 那就是 Linux下查看java进程的命令 回来做个记录 以防还有公司问到 之前工作上遇到Linux还是太少了 服 Linux下查看和停止所有java进程 在L
  • 2020年秋招嵌入式软件面试过程总结(华为联发科小米兆易创新)

    秋招投递公司23家 简历被刷1家 笔试 测评挂掉3家 至今无消息的8家 获得Offer的公司有小米 兆易创新 全志科技 浙江大华 海格通信 京信通信 景嘉微电子 广州朗国电子 北京华大电子 中国长城科技集团 文章目录 有面试 联发科北京 7
  • leetcode 编写一个函数来查找字符串数组中的最长公共前缀。

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 string longestCommonPrefix vector
  • 《程序员面试宝典》第6章sizeof和数据对齐

    一 看例子讲sizeof include
  • 指针笔试题(一)

    include
  • 2012.8.28 阿里巴巴电话面试

    半个小时左右的电话面试 问题不是太难 算法和数据结构是薄弱环节 1 现在主要在做什么研究 做过的项目介绍和在其中担任的职责 2 问语言方向 是否做过相关的工作 3 是否了解linux系统 在系统中都做过什么 用什么编译器 4 数据结构中 栈
  • 2014 奇虎360 笔试主观题

    1 在审计某一开源项目的代码时 假设有下面一个foo 子函数的实现 从安全的角度看 会存在安全漏洞吗 有的话 请 1 描述漏洞细节 2 说明可以利用的方法 3 还有该怎么修补漏洞 没有的话 也请说明为什么 int foo void func

随机推荐

  • 手把手_下载与安装Ubuntu_18.04_Linux系统

    1 下载Ubuntu镜像文件 1 找到官网 Ubuntu官网 注 不想了解官网的 请直接跳到清华镜像网 2 找到下载入口 如果您要下载最新版本的系统 就直接点击download 1 但是本文以18 04版本为例 故此 点击2处 3 找到国内
  • Python(7)

    Python 7 目录 Python 7 函数 全局变量与局部变量 文件 错误与异常 finally 函数 python的函数使用def定义 def add a b return a b def multiply a b return a
  • ESP8266连接 TCP

    AT GMR查看固件版本 v1 0以上固件命令如下 恢复到初始状态 AT RESTORE 设置WiFi应用模式为Station和Server共存模式 AT CWMODE 3 连接路由器 SSID为路由器用户名 Password为密码 AT
  • cocosCreator 物理关节组件

    cocosCreator 物理关节组件 重点 距离关节 旋转关节 绳子关节 轮子关节 焊接关节 棱柱关节 马达关节 重点 开启物理系统 物理系统默认是关闭的 如果需要使用物理系统 那么首先需要做的事情就是开启物理系统 否则你在编辑器里做的所
  • 如何在WPS、Word里插入高亮代码块

    需要使用Notepad step1 我们首先需要在Notepad 里安装好NppExport插件 步骤如下 第1步 打开 插件管理 第2步 搜索并安装 NppExport 插件 安装后 在已安装界面如下图所示 step2 然后将代码复制在N
  • ws协议与http协议的异同_websocket和http的区别

    websocket和http的区别 1 WebSocket是双向通信协议 模拟Socket协议 可以双向发送或接受信息 而HTTP是单向的 2 WebSocket是需要浏览器和服务器握手进行建立连接的 而http是浏览器发起向服务器的连接
  • 企业运维经典面试题汇总(2)

    1 写一个脚本查找最后创建时间是三天前 后缀是 log的文件并删除 find ctime 3 name log rm rf 2 统计ip访问情况 要求分析nginx访问日志 找出访问页面数量在前十位的ip cat access log aw
  • IDEA-Docker配置CA证书和远程访问

    前言 为了优化idea docker部署 防止自己服务器端口2375被黑 这里简单介绍一下idea docker的ca证书配置 1 新建一个脚本docker ca sh 将下面的脚本复制进去 注意修改一下docker主机ip 创建 Dock
  • spring boot org.springframework.context.annotation.ConflictingBeanDefinitionException

    org springframework context annotation ConflictingBeanDefinitionException 分析接解决方法 错误信息 分析接解决方法 annotation ConflictingBea
  • [从零开始学DeepFaceLab-10]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 模型训练

    目录 总体流程 步骤6 模型的选择与训练 模型训练命令 6 1 命令 6 train Quick96 bat 适用CPU only情形以及快速学习 必需之一
  • redis mysql 案例_redis 使用案例

    1 使用redis消息列队发布信息 在一些用户创造用户的应用中 如SNS 微博 可能出现1秒有上千万个用户同时发布消息的情况 此时如果使用mysql可能出现 too many connections 错误 当然 把mysql的max con
  • idea java 远程调试_使用IDEA进行JAVA代码的远程Debug

    在本地开发过程中 对代码进行Debug能逐行对代码逻辑进行调试 方便准备的排查问题 但是当代码发布到线上时 如果运行过程中出现异常 仅仅依靠日志来排查问题的话 会比较耗时 而且经常由于日志不全等原因而不能快速准确定位问题 而通过对JAVA代
  • 电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中 电机的控制与定时器有着密不可分的关系 无论是直流电机 步进电机还是舵机 都会用到定时器 比如最常用的有刷直流电机 会使用定时器产生PWM波来调节转速 通过定时器的正交编码器接口来测量转速等 本篇先介绍定时器的基础知识 然后对照
  • importing maven projects 9% 卡住

    导入一个maven工程后 一直显示 importing maven projects 9 解决办法 找到eclipse安装目录下的eclipse ini 在最后加入 vm JAVA HOME bin javaw exe 再次重启eclips
  • flutter 环形进度条组件CircularProgressIndicator、线性进度条组件LinearProgressIndicator

    环形进度条组件 不能放在ListView中 若不设置value 即无value参数 会一直加载动画 LinearProgressIndicator valueColor AlwaysStoppedAnimation Colors x 设置进
  • 如何进入mysql命令界面

    1 找到安装mysql安装路径 复制bin目录地址 eg D installmysqlin 2 进入cmd命令窗口 3 因为安装到D盘 进入D盘的盘符 输入D 直接输入cdD installmysqlin是无效的 4 进入bin目录 cdD
  • video.js 播放 rtsp、hls

    什么是HLS RTSP RTMP HLS HTTP Live Streaming 苹果公司提出的流媒体协议 直接把流媒体切片成一段段 信息保存到m3u列表文件中 可以将不同速率的版本切成相应的片 播放器可以直接使用http协议请求流数据 可
  • arduino+esp8266+onenet+mqtt_4G模块(EC20)连接MQTT服务器(EMQ X)

    上面的示意图也是这篇推文的主题 使用三个客户端EC20 ESP8266 MQTTX通过MQTT协议连接上我们搭建的EMQ X服务器最后完成消息的发布和订阅 概述 其中ESP826大家都有认识 那么相对陌生的EC20是一个4G模块 MQTTX
  • vika+obsidian快速进入一个研究领域

    目的是快速熟悉一个陌生的研究领域 写出文献综述 步骤 检索相关文献100篇以上 在vika中建表格 表头如下所示 阅读100篇论文的题目 关键词 摘要 填充vika表格 并找出需要精度的文献10篇左右 中文综述优先 精度10篇论文 并用ob
  • 《程序员面试宝典》第6章 宏和const

    一 用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量 int a char b 20 double cc FIND student a 0 FIND student b 4 FIND student cc 4 20