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

news2024/10/5 14:06:03

嵌入式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.coloradmin.cn/o/1901054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、快速启动框架:SpringBoot3实战-个人版

六、快速启动框架:SpringBoot3实战 文章目录 六、快速启动框架:SpringBoot3实战一、SpringBoot3介绍1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结回顾复习 二、SpringBoot3配置文件2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文…

前端面试题8

基础知识 解释一下什么是跨域问题,以及如何解决? 跨域问题是由于浏览器的同源策略限制了从一个源加载的网页脚本访问另一个源的数据。解决方法包括使用JSONP、CORS(跨源资源共享)、设置代理服务器等。 描述一下事件冒泡和事件捕获…

kubernetes集群部署:node节点部署和cri-docker运行时安装(四)

安装前准备 同《kubernetes集群部署:环境准备及master节点部署(二)》 安装cri-docker 在 Kubernetes 1.20 版本之前,Docker 是 Kubernetes 默认的容器运行时。然而,Kubernetes 社区决定在 Kubernetes 1.20 及以后的…

Spring中的事件监听器使用学习

一、什么是Spring中的事件监听机制? Spring框架中的事件监听机制是一种设计模式,它允许你定义和触发事件,同时允许其他组件监听这些事件并在事件发生时作出响应。这种机制基于观察者模式,提供了一种松耦合的方式来实现组件间的通信…

自动缩放 win7 远程桌面

https://mremoteng.org/download 用这个软件,下载 zip 版,不需要管理员权限 在这里找到的,选票最高的一个就是 https://superuser.com/questions/1030041/remote-desktop-zoom-and-full-screen-how-win10-remote-win7-2008-2003-ho

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——认识HAL_Delay和osDelay的区别

一、修改两个任务的优先级 任务一 任务二 二、使用HAL_Delay的实验结果 结果: LED1亮,LED2不亮 三、使用osDelay的实验结果 结果: LED1亮,LED2亮 四、解释原因 vTaskDelay 与 HAL_Delay 的区别 1.vTaskDelay 作用是让任务阻…

基于RK3588的8路摄像头实时全景拼接

基于RK3588的8路摄像头实时全景拼接 输入:2路csi转8路mpi的ahd摄像头,分辨率1920 * 1080 8路拼接结果: 6路拼接结果: UI界面: UI节目设计原理

Python爬虫获取视频

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

前端正悄悄蚕食后端开发者的工作,这真的好吗?

**前端正悄悄蚕食后端开发者的工作,这真的好吗?** 前端开发者的职责范围正在逐渐扩大。从最初的单纯页面设计,到现在的与后端数据交互、应用逻辑处理等,前端开发者在项目中的作用日益重要。与此同时,这也引发了一个值…

C++库函数--next_permutation(详细)

next_permutation介绍 用于生成某个序列的下一个排列。它通常在需要生成排列的问题中使用,比如全排列问题。 使用方法 普通序列 :next_permutation(起始地址,末尾地址1) 结构体:next_permutation&#…

cmake find_package 使用笔记

目录 1 find_package2 config mode2.1 搜索的文件名2.2 搜索路径 3 module mode3.1 搜索的文件名3.2 搜索路径 参考 1 find_package 这是官方文档 下面是学习总结: 首先是find_package的作用是什么?引入预编译的库。 find_package有两种模式&#xff1a…

如何搜索查找ICLR论文

记录有几个查找顶级会议文章的网址,不止ICLR ICLR 2024 还会有visualization模式: ICLR 2024 virtual 这个网站也很棒 Paper Copilot ICLR 2024 当然还有一个用图表示各论文相关关系的网站: connected papers

机械硬盘坏了怎么导出数据?5中高效恢复数据的方法

面对机械硬盘损坏的紧急情况,如何有效地导出数据成为了许多用户关注的焦点。以下是对上述方法的深入分析与润色,旨在为用户提供更加全面、清晰的指导。 机械硬盘损坏后的数据导出策略 1. 利用数据恢复软件: 当机械硬盘出现逻辑故障或轻微物…

解决使用PPIO欧派云服务器时无法使用sftp的问题

首先在对外TCP端口中选择22端口: 在连接-端口映射中可以看到: 使用ssh连接云服务器,更新包列表并安装OpenSSH服务器: apt-get update apt-get install-y openssh-server 创建 SSH 运行目录: mkdir /var/run/sshd 设…

【C语言】指针(1):入门理解篇

目录 一、内存和地址 1.1内存 1.2 深入理解计算机编址 二、指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量和解应用操作符 2.2.1 指针变量 2.2.2 解引用操作符 2.3指针变量的大小 三、指针变量类型的意义 3.1 指针的解引用 3.1指针-整数…

【恒源智享云】建立会话,后台运行实例

建立会话 tmux new -s session1退出会话 ctrlD

通信协议:常见的芯片内通信协议

相关阅读 通信协议https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文将简单介绍一些常见的芯片间通信协议,但不会涉及到协议的具体细节。 一、AMBA(Advanced Microcontroller Bus Architecture)…

设计模式探索:策略模式

1. 什么是策略模式(Strategy Pattern) 定义 策略模式(Strategy Pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而…

我使用HarmonyOs Next开发了b站的首页

1.实现效果展示: 2.图标准备 我使用的是iconfont图标,下面为项目中所使用到的图标 3. 代码 (1)Index.ets: import {InfoTop} from ../component/InfoTop import {InfoCenter} from ../component/InfoCenter import…

EtherCAT总线

目录 1、EtherCAT的系统组成 2、EtherCAT的运行原理 3、EtherCAT的数据帧结构 4、EtherCAT的寻址方式 5、EtherCAT的分布时钟 6、EtherCAT的通信模式 7、EtherCAT应用层协议 1、EtherCAT的系统组成 EtherCAT是一种实时以太网技术,由一个主站设备和多个从站…