【面试】嵌入式C语言题目整理

news2024/12/28 20:50:55

【面试】嵌入式C语言题目整理

  1. 描述内存四区。

内存四区分为:代码区、静态区、堆区、栈区
代码区就是用来存放代码的。
静态区用来存放全局变量、静态变量、常量(字符串常量、const修饰的全局变量)。
堆区中的内存是由程序员自己申请和释放的,用malloc函数去申请,用free释放内存。
栈区中的内存是由编译器自动申请和释放的,用来存放函数返回值、函数参数、局部变量等。

  1. new和malloc的区别

new和malloc都是用于动态的内存分配。
new是适用于C++申请内存分配,malloc在C和C++中都适用。
new自动计算分配内存大小,malloc需要手动计算内存大小,并以参数形态传入。也就是所new是根据类型申请的空间,malloc是根据输入的大小计算的内存空间。
new返回值是申请类型的指针,malloc返回类型是void*,需要强制转换。

  1. 数组与指针的区别

类型不同:数组是一种复合类型,它是由相同数据类型的元素组成的序列;指针是一种基本类型,它是一个指向某种类型地址的变量。
大小不同:如果用sizeof去求解占用内存大小的话,数组是全部元素实际占用的内存大小;而指针占用内存的大小与其指向类型无关,是固定的,例如在32位平台下,是固定的4字节。
内存布局不同:数组是一段连续的内存地址空间,而指针是指向某个存储位置的变量。
访问方式不同:数组可以通过下标来访问其中的元素,数组名可以当作指针使用,通过加加减减以及解引用的方式访问元素。

  1. static关键字

静态局部变量:只有当该变量所在的函数第一次被调用的时候,静态局部变量才会被初始化;当以后在进入该函数时,该变量不会再被初始化,仍旧保留上一次退出该函数时的值。
静态全局变量:只能被初始化一次,并且该变量的作用域只能是当前c文件。
静态函数:该函数只能被当前c文件调用,不可以被其他文件调用。

  1. gcc的编译过程

预处理、编译、汇编、链接

  1. 指针常量与常量指针

指针常量:int* const a; 该指针变量是不能变的,即存储的地址是不能变的,但是该地址指向的值是可以变化的。
常量指针:const int* a; 该指针变量是可以变化的,即存储的地址是可以变化的,但是地址指向的值是不能变化的。也就是说当a指向了一个地址之后,该地址中的值是不能通过a来改变的。

  1. #include<> 与#include ""的区别?

#include<>会去系统指定目录查找头文件。
#include ""会先在项目目录中查找头文件,如果没有的话,再去系统指定目录中查找。

  1. #define与typedef的区别

#define是预处理中的宏定义命令,在预处理阶段进行简单的字符替换,并不进行正确性检查。
typedef是关键字,常用于替换复杂类型声明定义的简单别名,在编译阶段是进行正确性检查的。
#define不需要;结尾,typedef需要;结尾
在这里插入图片描述
这种定义方式,t和tt都是int*类型,而d和a是int*,dd和aa是int。

  1. ifndef/define/endif的作用

避免头文件被重复引用

  1. extern关键字

c语言在定义变量或者函数的时候,默认是前面加了extern关键字。
表明该变量或者函数能够被其他文件所使用。

其他文件在使用的时候,需要用extern来声明所使用的变量或函数,表示该变量或函数需要去其他文件中查找。

  1. volatile关键字

volatile是c语言的关键字,作用是防止编译器被优化。
编译器优化的意思是,因为cpu的执行速度比内存的读取速度要快的多,某些变量可能会被存放在寄存器中,当cpu需要读取该变量时,就直接从寄存器读取(而不是去该变量的实际内存地址读取),提升了程序运行速度。
假如某个函数将该变量的值改变了,但是并未触发寄存器更新,那么cpu读取出来的值与实际值就会发生不一致。
所以需要vloatile关键字修饰变量,禁止编译器对其进行优化。
比如说:
中断服务程序中修改的供其它程序检测的变量需要加volatile。
被多个线程共享的变量需要加volatile。

  1. sizeof和strlen的区别

sizeof是关键字;strlen是函数
sizeof可以计算任何类型的实际内存占用大小;strlen只能计算字符串的实际长度。
sizeof是在编译时计算大小的;strlen是在运行期确定字符串长度的。

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

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

相关文章

《高性能MySQL》读书笔记

《高性能MySQL》 第一章 MySQL架构与历史第二章 MySQL基准测试第三章 服务器性能剖析第四章 Schema与数据类型优化第五章 创建高性能的索引第六章 查询性能优化第七章 MySQL高级特性第八章 优化服务器设置第九章 操作系统与硬件优化第十章 复制第十一章 可扩展的MySQL第十二章 …

sed进阶之多行命令

shell脚本编程系列 前面使用sed编辑器的基础命令时&#xff0c;所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时&#xff0c;它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令&#xff0c;一次处理一行数据&#xff0c;然后移到下一行重复这…

numpy稀疏矩阵拼接

今天我发现numpy中的array拼接时dense矩阵和sparse矩阵拼接使用的形式是不一样的&#xff0c;测试如下 普通矩阵拼接 import numpy as npaa np.random.randn(4,3) bb np.ones((4,3)) ccnp.c_[aa,bb] cc.shape结果如下 sparse矩阵拼接 from scipy.sparse import *row [1,1,…

DC-7通关详解

信息收集 漏洞发现 web提示我们说弱口令可能不会奏效 那么我们就先不考虑弱口令 searchsploit搜payload打打看,无果 看别人的wp知道了是通过web左下角的这个玩意去github搜 在这个仓库用户唯一的仓库中看config.php 发现账号密码 尝试后台和ssh登录 ssh登录成功 提权 当前…

一款免安装、多平台兼容的 拾色器(Color Picker)

文章目录 场景需求场景需求 Chrome Google DevTools 中的 拾色器 用法其他浏览器 场景需求 场景 我是一个前端开发人员&#xff0c;我写好的界面给老板过目。老板说有个地方颜色需要调整&#xff0c;然后发我一张图片指了指说就用这个位置这样的红色&#xff0c;我看挺合适。…

数字化时代 | 服务数字化创新和转型全景视图

本文我全面介绍一下数字化时代&#xff0c;服务将往何处去&#xff0c;将如何设计和推进数字化创新和转型。 Figure 1 服务创新和转型全景视图 如上图所示&#xff0c;在我CRM3.0理论体系中&#xff0c;服务创新和转型涉及到四个层面的内容&#xff1a; 服务定位和目标&#…

Python数据分析script必备知识(三)

Python数据分析script必备知识(三) 1.单个文件,双个文件,三个文件的读取方式 新建1.txt文件,2.txt文件,3.txt文件,效果如下 执行代码 """ 单文件,双文件,三文件的读取方式Python的读写 file.read() ———— 一次性读取整个文件内容,推荐使用re…

【信息安全案例】——系统软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;操作系统是管理系统资源、控制程序执行、提供良好人机界面和各种服务的一种系统软件&#xff0c;是连接计算机硬件与上层软件和用户之间的桥梁。因此&#xff0c;操作系统是其他系统软件、应用软件运行的基础&#xff0c;操作系统的安全性对于保…

React框架课时二认识项目的结构目录一

1react项目的目录的内容信息 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.json 锁定安装时的包的版本号,保证团队的依赖能保证一致。 ├── package.json ├── public 静态公共目录 └── src 开发用的源代码目录 2 图…

英伟达Jetson NX,AI配置。安装SDK Components

目录 0.前言 1.准备 2.安装 3.检验 4.总结 0.前言 五一了&#xff0c;劳动节劳个动。推荐一首歌《花房姑娘》。 1.准备 接上篇博客英伟达Jetson NX套件刷机 算是完整配置英伟达这个Jetson AI。说来也是强&#xff0c;把GPU的能力用在了算力上&#xff0c;CUDA可以的。 查看…

SqlServer数据库中文乱码问题解决方法

这个问题在网上找了很多资料都没找到真正解决问题的办法&#xff0c;最终去了官网&#xff0c;终于找到问题的答案了&#xff0c;整理出来做个记录。 问题描述&#xff1a; 项目中遇到一个问题&#xff0c;sqlserver中的数据是ok的&#xff0c;结果保存到mysql中是乱码&#…

PostgreSQL数据库

0 安装 我使用的操作系统为Ubuntu。 安装命令&#xff1a; sudo apt-get update sudo apt-get install postgresql postgresql-client 进入postgres&#xff1a; sudo -i -u postgres psql 退出命令&#xff1a; \q PostgreSQL启动服务等&#xff1a; sudo /etc/init.d/postgr…

KalLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a&#xff0c;看看kali linux是32位的还是64位&#xff0c;例如此处我的kali是32位的&#xff0c;因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的&#xff0c;若使用的是openjdk很可能会出现burpsuite闪退现象…

还在因为指针的释放问题而烦恼吗?快来看下C++11智能指针shared_ptr

智能指针是这样一种类&#xff0c;即其对象的特征类似于指针。例如&#xff0c;智能指针可以存储new分配的内存地址&#xff0c;也可以被解除引用。 因为智能指针是一个类对象&#xff0c;因此它可以修改和扩充简单指针的行为。例如&#xff0c;智能指针可以建立引用技术&#…

读研读博不emo

文章目录 起因积极走出封闭的孤独经历一——去心理健康中心看看书 原因剖析解决思路 好久没更b站&#xff0c; 起因 起因是这样的&#xff0c;在自己读研的研一下学期。也遭遇到了年以来的第一次心态发生有点压抑的情况吧。其实第一学期因为我遇到了很好的导师&#xff0c;然后…

二叉搜索树(Binary Search Tree)的深入剖析:代码+画图 详解插入、查找、删除操作

BSTree 0 引言1 二叉搜索树的概念2 创建一棵二叉搜索树&#xff08;插入操作&#xff09;2.1 画图分析插入操作2.2 代码思路2.3 利用中序遍历验证 3 二叉搜索树的查找操作4 二叉树搜索树的删除操作&#xff08;重点&#xff09;4.1 代码的一些细节分析 5 总结 0 引言 本篇文章…

【Elasticsearch】集群部署

文章目录 本地集群Windiows创建 elasticsearch-cluster 文件夹&#xff0c;在内部复制三个 elasticsearch 服务修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件启动集群测试集群-查看集群状态 本地开启集群Linux软件下载软件安装创建用户修改配置文件启动软件…

链表及链表的常见操作和用js封装一个链表

最近在学数据结构和算法&#xff0c;正好将学习的东西记录下来&#xff0c;我是跟着一个b站博主学习的&#xff0c;是使用js来进行讲解的&#xff0c;待会也会在文章后面附上视频链接地址&#xff0c;大家想学习的可以去看看 本文主要讲解单向链表&#xff0c;双向链表后续也会…

Java后端:html转pdf实战笔记

目录 1、htmltopdf有什么用&#xff1f; 2、什么是wkhtmltopdf 3、wkhtmltopdf 参数介绍 4、示例项目 5、预览效果 1、htmltopdf有什么用&#xff1f; htmltopdf 是一款基于wkhtmltopdf技术的html转pdf文档java类库&#xff0c;支持html转pdf和url转pdf。 2、什么是wkhtmltopdf…

Renesa 瑞萨 A4M2 移植文件系统FAT32

配置SDIO底层驱动&#xff08;SD card&#xff09; 跳到对应GPIO&#xff0c;进行复用 将Operation Mode配置 SD_MMC 4Bit&#xff0c;系统会自动配置 会到stacks 根据上面提示&#xff0c;解决错误。 解决第一个error mmc配置 mmc 以上SD卡底层配置完成 使用串口作为…