人心易变,这段有趣的C代码也一样!!!
时间:2022-07-22
本文章向大家介绍人心易变,这段有趣的C代码也一样!!!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
C语言中的volatile关键字也许大部分人都听过,但实际用过的人可能不多,它的字面意思是“易变的”。今天我们的题目就跟它有关,这也是一道比较著名和经典的面试题,不同公司对它进行过多次考察,代码如下:
int square(volatile int *p){
return(*p)*(*p);
}
函数意思大家都明白,就是计算整数的平方,就问上面的代码有没有问题?
我们都知道为了提高效率编译器会对程序进行一定的优化,但有时“自作聪明”的编译器也会帮倒忙,刚开始我们提到volatile关键字的字面意思是“易变的,不固定的”,用它来修饰变量,目的就是告诉编译器你不要管我,不要对我进行优化,我是“易变的”。
回到本题,如果说编译器在编译上述代码时,把它等价为如下:
int square(volatile int *p){
int a=*p;
int b=*p;
return a*b;
}
由于volatile的缘故,*p随时可能改变,假如在执行完int a=*p后,*p的值变了,那很显然a和b的值不想等,那计算出来自然也不是平方了,怎么修改呢?如下:
int square(volatile int *p){
int a=*p;
return a*a;
}
从今天这道经典的面试题可以看出,面对一些比较少用的关键字,绝对不能掉以轻心,而对于编译器的自动优化问题,它是否帮了倒忙?这也是我们需要考量的一个关键点。其实这些都需要我们具备扎实的编程基本功,只有这样,才能尽量少出错甚至不出错,希望今天的知识对大家有所帮助,感谢耐心阅读!
End
- 使用MongoDB存储访问者信息
- 解决WordPress 打开Feed页面“This page contains the following errors…”的问题
- jquery表单属性筛选元素
- [C#1] 10-事件
- Windows 7的VPC虚拟机自动不与主机时间同步的解决办法
- [C#1] 9-委托
- jquery基本选择器
- rainyday.js——超逼真全屏雨滴模拟插件
- [C#1] 8-数组
- ASP.NET MVC2 数据模型验证类库:MVC Foolproof Validation
- [C#1] 7-枚举
- 在链接前面自动添加favicon 图标(jquery)
- zepto 基础知识(4)
- Intro.js:网站功能操作分布引导插件(附中文独家使用教程)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- macOS 安装软件已损坏无法打开解决办法 (真好用!)
- nginx 配置反向代理
- ES6新特性速查表
- React-Native Android打包
- React-Native iOS打包
- Webpack+Babel手把手带你搭建开发环境(内附配置文件)
- Redux 异步解决方案2. Redux-Saga中间件
- Redux异步解决方案 1. Redux-Thunk中间件
- 深度学习Pytorch检测实战 - Notes - 第1&2章 基础知识
- Java多线程编程在JMeter中应用
- Kubernetes 升级填坑指南(一)
- 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
- 用python实现一个verilog网表Parser
- 经典 | Python实例小挑战—Part eight
- python的数字与字符串相互转换