嵌入式C语言面试相关知识——关键字(不定期更新)

嵌入式C语言面试相关知识——关键字

  • 一、博客声明
  • 二、C语言关键字
    • 1、sizeof关键字
    • 2、static关键字
    • 3、const关键字
    • 4、volatile关键字
    • 5、extern关键字

一、博客声明

  又是一年一度的秋招,怎么能只刷笔试题目呢,面试题目也得看,想当好厂的牛马其实也不容易呀O(∩_∩)O。注意:这篇博客大部分是来自网上的资源,我只是为了加深印象,总结和抄一遍,没错,就是抄一遍,相关链接放在下面。

借鉴内容链接:C语言关键字,不为人知的细节解读


二、C语言关键字

1、sizeof关键字

  sizeof在面试中会经常结合strlen()一起问它们之间的区别,虽然它们都是与计算内存大小有关,但是他们的作用是不相同的。两者的区别在于:

  • sizeof是一个运算符;而strlen()是一个函数
  • sizeof计算的是变量或类型所占用的内存字节大小;而strlen()计算的是字符串中字符的个数,或者说是字符数组中元素的个数
  • sizeof的语法是sizeof(data type),即sizeof可以用于计算任何类型的数据;而strlen()的语法是strlen(const char* str),即只能用于计算字符串或者字符数组。
  • sizeof如果计算字符串的长度,会把末尾的字符串结束符\0也计算上;strlen()计算时,不会包含末尾的字符结束符\0。也就是说,用它们去计算字符串Hello的长度,前者的结果是6,而后者的结果是5

2、static关键字

  面试中会被经常问这个关键字的作用,如下:

  • 在修饰局部变量时,static修饰的静态局部变量有且只执行一次初始化任务,所以静态局部变量每次被幅值都会保存。而且延长了局部变量的生命周期,直到程序运行解释后才会被释放。即静态局部变量所在的.c文件运行结束才会被释放,而普通的局部变量在它所在的函数调用结束后就被释放了。还有一点是,普通局部变量被存放在RAM中的 栈(Stack) 区域,被static修饰的静态局部变量被采访在 数据段(data) 区域。
  • 在修饰全局变量时,这个全局变量只能在本文件中访问,也就是限定了其作用域,不能在其他文件中进行访问,即便是使用extern外部声明也不可行。
  • 在修饰函数时,也是会被限定其作用域,被修饰的函数只能在本文件中调用,不能被其他文件调用。
  • static修饰的变量采访在全局数据区的静态变量区,包括全局静态变量和局部静态变量,均在全局数据区分配内存。初始化的时候自动初始化为0。

tips:externstatic不能同时使用;因为用static修饰的全局变量被限定了作用域,所以其他文件中可以有同名的全局变量被定义声明。
在这里插入图片描述

3、const关键字

  该关键字在面试中经常被问其作用,也会被问到与#define的区别。

  • 作用: 用于定义只读变量,即如果一个变量被const修饰,那么它的值将无法再被更改。值得注意的是,const定义的是变量,而不是常量。在C99标准中,const定义的变量是全局变量,存放在全局数据区。此外,用const修饰变量时,一定要给变量初始化幅值,否者编译器会报错。
  • 与#define的区别:
    1、const常量有数据类型,而宏定义常量没有数据类型,只是简单的文本替换。因此,前者会有类型检查,而后者没有;
    2、const常量有作用域,只在它定义的作用域中有效,而宏定义常量没有作用域,可以在文件的任何地方使用。

4、volatile关键字

  该关键字经常被问到作用和理解。
  了解这个关键字之前,我们需要了解一下编译器的一个优化操作。由于内存访问的数据远不及CPU处理速度,为了提高存取速度,编译器优化时会把内存变量缓冲到寄存器中,若变量由其他程序所改变,其内存中的值会发生改变,而寄存器中的值不会改变, 将出现不一样的现象。volatile单词的意思就是易变的,当修饰变量时,就会告诉编译器,这个变量容易因为其他原因被发生改变,因此编译器每次读取的时候都从原始地址中进读取。作用如下:

  • 告诉编译器不要缓冲变量: 当你将一个变量声明为volatile时,编译器会知道这个变量可能在任何时候被外部因素(如硬件、中断服务程序、线程等)改变,因此被volatile修饰后,编译器不会对这个变量执行优化操作。
  • 确保每次访问都是直接从内存中进行读取: 每次读取volatile时,编译器都会生成代码从内存中读取该变量的值,而不是使用之前储存在寄存器或者其他地方的值。
  • 在多线程和硬件交互特别有用: 在多线程环境中,一个线程可能正在修改一个变量,而另外一个线程正在读取该变量。如果不使用volatile进行修饰,编译器可能会优化读取操作,导致读取到的是旧值。同样,当与硬件交互时,硬件可能会在任何时候改变某个内存位置中的值,因此也需要使用volatile来确保读取到的是最新的值。

5、extern关键字

  该关键字经常被用到作用。

  • 当在多个源文件中共享全局变量时,通常在一个源文件中定义该变量(即分配储存空间),而在其他源文件中使用extern声明该变量,以便能够访问它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/777693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化之智慧城市的脉动与洞察

在数字化转型的浪潮中,城市作为社会经济发展的核心单元,正经历着前所未有的变革。城市数据可视化大屏看板作为这一变革中的重要工具,不仅极大地提升了城市管理效率,还为公众提供了直观、全面的城市运行状态视图,成为智慧城市建设不可或缺的一部分。本文将深入探讨以“城市…

一文理解 Treelite,Treelite 为决策树集成模型的部署和推理提供了高效、灵活的解决方案

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、什么是 Treelite? Treelite 是一个专门用于将决策树集成模型高效部署到生产环境中的机器学习模型编译器,特别适合处理大批量数据的推理任务,能够显著提升推理性能…

Java之网络面试经典题(一)

目录 ​编辑 一.Session和cookie Cookie Session 二.HTTP和HTTPS的区别 三.浅谈HTTPS为什么是安全的? 四.TCP和UDP 五.GET和Post的区别 六.forward 和 redirect 的区别? 本专栏全是博主自己收集的面试题,仅可参考,不能相…

嵌入式Linux系统编程 — 7.2 进程的环境变量

目录 1 什么是进程的环境变量 2 环境变量的作用 3 应用程序中获取环境变量 3.1 environ全局变量 3.2 获取指定环境变量 getenv 4 添加/删除/修改环境变量 4.1 putenv()函数添加环境变量 4.2 setenv()函数 4.3 unsetenv()函数 1 什么是进程的环境变量 每一个进程都有一…

Android - Json/Gson

Json数据解析 json对象:花括号开头和结尾,中间是键值对形式————”属性”:属性值”” json数组:中括号里放置 json 数组,里面是多个json对象或者数字等 JSONObject 利用 JSONObject 解析 1.创建 JSONObject 对象,传…

快手大模型首次集体亮相,用AI重塑内容与商业生态

7月6日,在2024世界人工智能大会期间,快手举办了以“新AI新应用新生态”为主题的大模型论坛,会上,快手大模型首次集体亮相,视频生成大模型可灵、图像生成大模型可图等产品的多项新功能正式发布。 继图生视频、视频续写…

Appium启动APP时报错Security exception: Permission Denial

报错内容Security exception: Permission Denial: starting Intent 直接通过am命令尝试也是同样的报错 查阅资料了解到:android:exported | App quality | Android Developers exported属性默认false,所以android:exported"false"修改为t…

QT学习积累——如何提高Qt遍历list的效率

目录 引出Qt遍历list提高效率显示函数的调用使用&与不使用&除法的一个坑 总结自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 引出 QT学习积累——如何提高Qt遍历list…

Springboot学习之用EasyExcel4导入导出数据(基于MyBatisPlus)

一、POM依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…

Kotlin中的数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

使用WinSCP工具连接Windows电脑与Ubuntu虚拟机实现文件共享传输

一。环境配置 1.首先你的Windows电脑上安装了VMware虚拟机&#xff0c;虚拟机装有Ubuntu系统&#xff1b; 2.在你的windows电脑安装了WinSCP工具&#xff1b; 3.打开WinSCP工具默认是这样 二。设置WinSCP连接 打开WinSCP&#xff0c;点击新标签页&#xff0c;进入到如下图的…

Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制

这里写目录标题 0. 机器人配置1. Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制1.1 TurtleBot3 Waffle Pi端配置1.2 PC端配置1.2.1 安装turtlebot3的环境配置1.2.2 创建项目并安装Turtlebot31.2.3 配置环境变量 1.3 PC端与TurtleBot3进行通信1.3.1 PC端与机器人端互PING和SSH连…

用C#调用Windows API向指定窗口发送按键消息详解与示例

文章目录 1. 按键消息的定义及功能2. 引入所需的命名空间3. 定义Windows API函数4. 定义发送消息的方法5. 获取窗口句柄6. 调用API发送按键消息7. 使用示例注意事项总结 在C#中调用Windows API向指定窗口发送按键消息是一种常见的操作&#xff0c;这通常用于自动化脚本、游戏辅…

加密货币大利好!9月降息概率突破70%!美国可能大幅降息或多次降息?

根据最新消息&#xff0c;美国9月降息的概率已经突破70%&#xff0c;这对加密货币市场来说是个利好消息。与此同时&#xff0c;美国经济表现疲软&#xff0c;可能会陷入衰退&#xff0c;联邦储备系统(Fed)接下来会不会果断采取大幅降息措施备受关注。 美国劳工统计局7月5日公布…

前端面试项目细节重难点(十)(已工作|做分享)

面试官&#xff1a;现场出需求&#xff1a;我想让一个左侧盒子可以进行拉伸、缩小、展示或隐藏这些功能&#xff0c;你会如何实现&#xff1f; 答&#xff1a;&#xff08;1&#xff09;分析问题&#xff1a;其实&#xff0c;我听到这个问题后&#xff1a; 我的第一种想法&am…

E1.【C语言】练习:用函数求两个整数的较大值

有关创建函数见&#xff1a; 12.【C语言】创建函数 写法 1&#xff1a;if语句 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int max(int a, int b) {if (a > b)return a;elsereturn b; } int main() {int a 0;int b 0;scanf("%d%d", &a,…

迎接AI新时代:GPT-5即将登场的巨大变革与应用前瞻

迎接AI新时代&#xff1a;GPT-5即将登场的巨大变革与应用前瞻 &#x1f48e;1. GPT-5 一年半后发布&#xff1a;AI新时代的来临1.1 GPT-5的飞跃&#xff1a;从高中生到博士生 &#x1f48e;2. GPT-5的潜在应用场景&#x1f48e;2.1 医疗诊断和健康管理&#x1f48e;2.2 教育领域…

生产力工具|VS Code安装及使用指南

一、VS Code介绍 &#xff08;一&#xff09;软件介绍 Visual Studio Code&#xff08;简称VS Code&#xff09;是由Microsoft开发的免费开源代码编辑器&#xff0c;适用于Windows、macOS和Linux操作系统。它支持多种编程语言&#xff0c;如JavaScript、Python、C等&#xff0…

Python爬虫获取视频

验证电脑是否安装python 1.winr输入cmd 2.在黑窗口输入 python.exe 3.不是命令不存在就说明python环境安装完成 抓取快手视频 1.在phcharm应用中新建一个项目 3.新建一个python文件 4.选择python文件,随便起一个名字后按回车 5.安装requests pip install requests 6.寻找需要的…

Selenium 切换 frame/iframe

环境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19说明&#xff1a; driver.switch_to.frame() # 将当前定位的主体切换为frame/iframe表单的内嵌页面中 driver.switch_to.default_content() # 跳回最外层的页面# 判断元素是否在 frame/ifame 中 # 126 邮箱为例 # …