1、volatile关键字

volatile int i=10;
int j = i;
...
int k = i;

volatile告诉编译器i变量是随时可能发生变化的,例如IO端口的输入值,所以每次读取i都是从i的地址中读取,而不是,当重读读取i时发现读取变量一样,调用上次的寄存器。

下面是volatile变量的几个例子:

  1. 并行设备的硬件寄存器(如:状态寄存器)

  2. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

  3. 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。

int square(volatile int *ptr)
{
return *ptr * *ptr;
}

可以等同为下面代码

int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}

正确的平方代码应为

int square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}

2、union 联合体、共用体

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),

共用体占用的内存等于最长的成员占用的内存

共用体使用了内存覆盖技术同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉

计算的时候需要考虑字节对齐问题:

  1. 所占空间必须是成员变量中字节最大的整数倍
  2. 每个变量类型的偏移量必须是该变量类型的整数倍
  3. 对于联合体,由于所有变量都是共用一块内存,还需注意数组占用最大内



    例如:

    Typedef union {double I;int k[5];char c;} DATE;

    在联合体中成员变量最大为 double 为 8 个字节,所以最终大小必须是 8

    的整数倍;又因为联合体是共占内存空间,即 int*5=20 字节,所以最终

    为 24 个字节

C语言八股文(温故知新)的更多相关文章

  1. 18)Java八股文名词

      >VO:   value-object >DTO: Data Transform Object >DTD: Document Type Definition      文档类型定 ...

  2. 再回首,Java温故知新(一):Java概述

    Java发展历程 Java的发展要追溯到1991年,Patrick Naughton(帕特里克·诺顿)和James Gosling(詹姆斯·高斯林)带领Sun公司的工程师打算为有线电视转换盒之类的消费 ...

  3. 【温故知新】——HTML5重要知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 一.HTML5新特性 —— 十个新特性:凌乱 (1)新的语义标签 (2)增强型表单(表单2.0) (3)音频和视频 (4)C ...

  4. 【温故知新】——Bootstrap响应式知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 开发工具 1.记事本,Editplus,... ... 2.Sublime,Dreamweaver 3.Webstorm = ...

  5. 【温故知新】——HTML基础重要知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 一.HTML快速入门(重点) 1.HTML概述 1.什么是HTML HTML : Hyper Text Markup Lan ...

  6. 带你学够浪:Go语言基础系列-环境配置和 Hello world

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 前面几周陆陆续续写了一些后端技术的文章,包括数据库.微 ...

  7. 《面试八股文》之 Redis 16卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...

  8. Java八股文纯享版——篇②:并发编程

    注: 1.笔记为个人归纳整理,尽力保证准确性,如有错误,恳请指正 2.写文不易,转载请注明出处 3.本文首发地址 https://blog.leapmie.com/archives/c02a6ed1/ ...

  9. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  10. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

随机推荐

  1. Android Adapter 添加数据,忽然变成倒序

    忽然出现的问题,最后发现:因为RecyclerView 调用 setLayoutManager方法时,最后一个参数是否显示分割线为true 改为false即可

  2. ocelot 从15.x版本升级到16.x版本 UnableToFindDownstreamRouteError Message: Failed to mat ch Route configuration for upstream path

    项目里面用到 ocelot ,之前老的项目用的是 15.x 最近要一个新项目也要用到,直接安装了最新的16.x,结果死活都匹配不到上游路径. 刚开始以为是自己代码写得有问题,各种找问题,结果后来把oc ...

  3. 一个开源、跨平台的.NET UI框架 - Avalonia UI

    前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...

  4. 小tips:vue结合百度UEditor富文本编辑器实现vue-ueditor-wrap

    1.下载vue-ueditor-wrap cnpm i vue-ueditor-wrap -S 下载最新的 UEditor 资源文件放入你项目的静态资源目录中(比如 static 或者 public, ...

  5. Unity中的三种渲染路径

    Unity中的渲染路径 Unity的渲染路径 在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的.因此,我们只有为Shader正确地选择和设置了 ...

  6. 【学习笔记】状压DP

    状态压缩DP 对于一个集合,他一有\(2^n\)个子集,而状态压缩就是枚举这些子集,每一个状态就是一个由\(01\)构成的集合,如果为\(0\)就表示不选当前的元素,否则就表示选.因为状态压缩将每一个 ...

  7. Qt中当程序结束时线程的退出

    在Qt程序结束时应该如何退出正在运行的任务子线程? 因个人经验和能力有限,本文仅供参考,有错误或者考虑不完善的地方请各位批评指正. 一.正常情况下如何创建和退出线程 1.继承QThread,重写run ...

  8. 2022年8月中国数据库排行榜:openGauss重夺榜眼,PolarDB反超人大金仓

    "烈日杲杲,夺榜愈烈." 2022年8月的 墨天轮中国数据库流行度排行榜 火热出炉,8月排行榜共有236个数据库参与排名.本月榜单前十名的变化可以用"两反超"来 ...

  9. 共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG)

    大家期待的高可用篇来啦!在上期<墨天轮高分技术文档分享-Oracle升级迁移篇>中大家对数据库高可用架构相关文档呼声较高,这不就来啦! 数据库的高可用架构能够在发生宕机或意外中断等故障时起 ...

  10. TiDB集群安装维护

    TIDB安装操作文档-https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup 1.环境准备(每台) 1-查看系 ...