人心易变,这段有趣的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;
}
从今天这道经典的面试题可以看出,面对一些比较少用的关键字,绝对不能掉以轻心,而对于编译器的自动优化问题,它是否帮了倒忙?这也是我们需要考量的一个关键点。其实这些都需要我们具备扎实的编程基本功,只有这样,才能尽量少出错甚至不出错,希望今天的知识对大家有所帮助,感谢耐心阅读!
- 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 数组属性和方法
- laravel框架模型和数据库基础操作实例详解
- Yii Framework框架使用PHPExcel组件的方法示例
- thinkphp3.2.3框架动态切换多数据库的方法分析
- 安装docker和docker-compose实例详解
- 如何判断php复选框是否被选中
- php实现的生成排列算法示例
- php多进程应用场景实例详解
- Linux Crontab Shell脚本实现秒级定时任务的办法
- laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
- yii框架使用分页的方法分析
- Linux服务器间文件实时同步的实现
- TP3.2.3框架文件上传操作实例详解
- yii2.0框架场景的简单使用示例
- Laravel5.6框架使用CKEditor5相关配置详解
- 怎么在Linux中自定义bash命令提示符