嵌入式面试 C语言 const关键字用法

news/2025/2/26 7:34:30

7.关键字const是什么含意?
我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.
如果你从没有读到那篇文章,只要能说出**const意味着“只读”**就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?

const int a;    //整型常数
int const a;    //整型常数
const int *a;   //指向整型常数的指针(整型常数不能修改,指针可以)
int * const a;    //指向整型数得常指针(指针指向的整型数可以修改,指针不能修改)
int const * a const;    //指向整型常数的常指针(指针指向的整型数不能修改,同时指针也不能修改)

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思 a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。


http://www.niftyadmin.cn/n/693806.html

相关文章

vue + element-ui 聊天_分享几个宝藏级Vue管理后台框架 必须收藏

element ★star44.4kElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,是一种网站快速成型工具。vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内…

嵌入式面试 C语言 编写函数把一数组里内容前后颠倒 用指针实现

编写函数把一个数组里所有存储区的内容前后颠倒 加入数组里原有内容是1 2 3 4 5 颠倒后的内容是5 4 3 2 1 用指针编写这个函数 /CSD1702/biaoc/day10 10reverse.c /*指针练习 */ #include <stdio.h> int *reverse(int *p_num,int size){ //补充&#xff1a;把数组第一个…

Transformer入门学习

摘要&#xff1a;记录一下自己在10月份参加DataWhale组队学习transformer的所得。这篇博客主要关于transformer基本原理的学习和一个输入序列转换的简单demo&#xff0c;并补充了一些transformer在CV领域的variants&#xff0c;希望本次组队学习能帮助自己快速入门&#xff0c;…

嵌入式课程笔记_01_STDC01_20190303

文章目录01_STDC01day1&#xff1a; Linux操作系统和文件系统 、 Linux常见命令STDC01_day01_01-Linux操作系统和文件系统.tsSTDC01_day01_02-文件系统.tsSTDC01_day01_03-Linux常见命令01.tsSTDC01_day01_04-Linux常见命令02.tsSTDC01_day01_05-vi编辑器01.tsSTDC01_day01_06-…

python如何下载zip文件_Python:如何下载zip文件

这是一个更强大的解决方案&#xff0c;使用urllib2以块的形式下载文件并打印下载状态import osimport urllib2import mathdef downloadChunks(url):"""Helper to download large filesthe only arg is a urlthis file will go to a temp directorythe file will…

miniimagenet的图像预处理代码_Python中的图像增强技术

策划 | 刘燕 作者 | Renu Khandelwal 翻译 | 王文刚 编辑 | Linda AI 前线导读&#xff1a;图像增强是一种非常强大的技术&#xff0c;针对现有图像人为创建各种变化以扩展图像数据集&#xff0c;例如缩放现有图像、将现有图像旋转几度、剪切或裁剪图像等等。在本文中&#xff…

嵌入式课程笔记_02_STDC02_20190308

文章目录02_STDC02day1&#xff1a; 二重循环 、 while循环和do循环 、 缓冲区STDC02_day01_01-break和continue02.tsSTDC02_day01_02-二重循环01.tsSTDC02_day01_03-二重循环02.tsSTDC02_day01_04-while循环和do循环01.tsSTDC02_day01_05-while循环和do循环02.tsSTDC02_day01_…

asp.net一键服务器小工具_一个小工具帮你搞定实时监控Nginx服务器

Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行&#xff0c;监控Web服务器对于查看网站上发生的情况至关重要。关注最多的便是日志变动&#xff0c;查看实时日志文件变动大家第一反应应该是tail -f /path/to/log命令吧&#xff0c;但是如果每个网站的访问日志都是…