嵌入式面试题练习 - 2024/11/15
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导
1.设有定义char *p[]={"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是()
A *p[1] +3
B *(p[1] +3)
C *(p[3] +1)
D p[3] [1]
解析:
p 是一个指针数组,其中每个元素都指向一个字符串字面量。
A. *p[1] + 3
这个表达式首先解引用 p[1](即指向 "Beijing" 的指针),得到 'B' 字符,然后将其 ASCII 值加 3,结果是 'E' 的 ASCII 值,而不是 'j'。
B. *(p[1] + 3)
这个表达式首先计算 p[1] + 3,它是指向 "Beijing" 字符串中第四个字符(从0开始计数)的指针(即指向 'j' 的指针),然后通过解引用得到 'j' 字符。这是正确的表达式。
C. *(p[3] + 1)
这个表达式试图访问 p[3],但数组 p 只有三个元素(索引为 0, 1, 2),所以 p[3] 是未定义的,这将导致未定义行为。(下角标错误)
D. p[3][1]
同样,这个表达式也试图访问 p[3],这是未定义的,因此这个表达式也是错误的。
综上所述,正确答案是 B,即 *(p[1] + 3),这个表达式将返回 'j' 字符。
2.有以下程序, 程序运行后的输出结果是( )
#include "stdio.h"void main() {int a[5] = {1, 2, 3, 4, 5}, b[5] = {0, 2, 1, 3, 0}, i, s = 0;for(i=0; i < 5; i++) s = s + a[b[i]];printf("%d\n", s);}
解析:
首先,我们有两个数组 a 和 b:
int a[5] = {1, 2, 3, 4, 5};int b[5] = {0, 2, 1, 3, 0};
数组 a 包含值 {1, 2, 3, 4, 5},数组 b 包含值 {0, 2, 1, 3, 0}。
接下来,我们有一个循环,它遍历数组 b 的每个元素,并使用这些元素作为数组 a 的索引来累加值:
for(i=0; i < 5; i++)s = s + a[b[i]];
让我们逐步执行这个循环:
-
当
i = 0时,b[0] = 0,所以a[b[0]] = a[0] = 1。因此,s = s + 1,s变为1。 -
当
i = 1时,b[1] = 2,所以a[b[1]] = a[2] = 3。因此,s = s + 3,s变为4。 -
当
i = 2时,b[2] = 1,所以a[b[2]] = a[1] = 2。因此,s = s + 2,s变为6。 -
当
i = 3时,b[3] = 3,所以a[b[3]] = a[3] = 4。因此,s = s + 4,s变为10。 -
当
i = 4时,b[4] = 0,所以a[b[4]] = a[0] = 1。因此,s = s + 1,s变为11。
最后,程序输出 s 的值是 11。
3.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()
A 称为函数的直接递归调用
B 称为函数的间接递归调用
C 称为函数的循环调用
D C语言中不允许这样的递归调用
解析:
-
直接递归调用:指的是一个函数在其执行过程中直接调用自身。
-
间接递归调用:涉及两个或更多函数,其中一个函数调用另一个函数,而那个函数又直接或间接地调用回原来的函数。
-
循环调用:通常指的是一系列函数相互调用,形成一个闭环,但没有明确的递归结构(即不是函数自己调用自己)。
题目中的情况:函数funA调用了函数funB,而函数funB又调用了函数funA。
-
这不是直接递归调用,因为直接递归调用要求函数自己调用自己,而这里是两个函数相互调用。
-
这是间接递归调用的一个例子,因为
funA和funB通过彼此调用形成了一个间接的递归链。 -
虽然函数间相互调用形成了一个闭环,但这不是传统意义上的循环调用,因为循环调用通常不涉及递归的概念。
-
C语言中允许这样的递归调用,只要递归不是无限的(即必须有终止条件来防止栈溢出)。
综上所述,这种情况最符合间接递归调用的定义。
因此,正确答案是 B 称为函数的间接递归调用。
4.执行以下语句,输出结果为()
#include <stdio.h>int main( ) {char *p1 = "hello";char *p2 = "world";char *p3 = "a piece of cake";char *str[] = {p1, p2, p3};printf("%c", *(str[0] + 1));}
解析;
题目定义了三个字符串常量 p1, p2, 和 p3,然后创建了一个字符指针数组 str,该数组包含这三个字符串的地址。接下来,我们使用 printf 函数来打印 str[0](即 p1 指向的字符串 "hello")的第二个字符。
char *p1 = "hello"; // p1 指向字符串 "hello"char *p2 = "world"; // p2 指向字符串 "world"char *p3 = "a piece of cake"; // p3 指向字符串 "a piece of cake"char *str[] = {p1, p2, p3}; // str 是一个字符指针数组,包含 p1, p2, 和 p3 的地址printf("%c", *(str[0] + 1)); // 打印 str[0](即 p1)指向的字符串的第二个字符
str[0] 是 p1,它指向字符串 "hello"。str[0] + 1 是将指针 p1 向前移动一个字符位置,因此它现在指向 "hello" 中的 'e'。
*(str[0] + 1) 解引用这个新的指针位置,得到字符 'e'。
因此,printf("%c", *(str[0] + 1)); 会打印字符 'e'。
所以,程序的输出结果是:e
未完待续,持续更新!
以防后边找不到可以点赞收藏下!
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导
相关文章:
嵌入式面试题练习 - 2024/11/15
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导 1.设有定义char *p[]{"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是() A *p[1] 3 B *(p[1] 3) C *(p[3] 1) D p[3] […...
分析http话术异常挂断原因
用户反馈在与机器人通话时,自己明明有说话,但是通话还是被挂断了,想知道原因。 分析日志 我们根据用户提供的freeswitch日志分析:发现是因为超时导致话术执行hangup动作,结束了通话。 从这一行向上分析日志ÿ…...
云岚到家 秒杀抢购
目录 秒杀抢购业务特点 常用技术方案 抢券 抢券界面 进行抢券 我的优惠券列表 活动查询 系统设计 活动查询分析 活动查询界面显示了哪些数据? 面向高并发如何提高活动查询性能? 如何保证缓存一致性? 数据流 Redis数据结构设计 如…...
【WPF】Prism库学习(一)
Prism介绍 1. Prism框架概述: Prism是一个用于构建松耦合、可维护和可测试的XAML应用程序的框架。它支持WPF、.NET MAUI、Uno Platform和Xamarin Forms等多个平台。对于每个平台,Prism都有单独的发布版本,并且它们在不同的时间线上独立开发。…...
0 -vscode搭建python环境教程参考(windows)
引用一篇非常详细的vscode搭建python环境教程 链接:vscode安装以及配置Python基本环境 以下是VSCode和PyCharm的对比 个人更建议使用VSCode Visual Studio Code (VSCode) Visual Studio Code 是由微软开发的一款免费、开源的轻量级代码编辑器。它支持多种编程语…...
Uniapp 引入 Android aar 包 和 Android 离线打包
需求: 原生安卓 apk 要求嵌入到 uniapp 中,并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你,从 apk 到 aar,以及打包冲突到如何运行,期间我所遇到的问题都会 一 一 进行说明,相关版本以我文章内为…...
10款高效音频剪辑工具,让声音编辑更上一层楼。
音频剪辑在音频,视频,广告制作,游戏开发,广播等领域中都有广泛的应用。通过音频剪辑,创作者可以通将不同的音频片段进行剪切、拼接、混音等操作,创作出风格各异的音乐作品。如果你也正在为音频创作而努力的…...
Javascript——设计模式(一)
Javascript常见设计模式-CSDN博客 设计模式专栏内容总结-CSDN博客 C#编程思想——设计模式-CSDN博客 设计模式概述及其作用 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式的主要目的是为…...
Hybird和WebView
在移动端Hybrid开发模式下,iOS和Android应用都可以通过一种共享代码的方式,利用Web技术(HTML、CSS、JavaScript)和原生应用的功能进行开发。这种方式的主要优点是减少了开发成本,因为大部分代码可以共享,同…...
c++实现中缀表达式 转换为后缀表达式
使用栈来计算后缀表达式的值: 9(3 - 1)*310/2; 后缀表达式:所有的符号都是在运算数字的后面出现: 9 3 1 – 3 * 10 2 / 规则: 中缀表达式转后缀表达式: 1.从左到右遍历中缀表达式的每个数字和符号,若是数字就打印同时入栈数…...
Cisco FMC重置SmartLicense到Evaluatin mode步骤
1 科普: what is FMC full name is Firepower Management Center, 是思科FirePower防火墙的统一管理平台. 能管理ASA不? no,只能管理FTD模式的墙。这里的FTD包括物理机firepower系列运行的FTD,以及FTDv(虚拟化版本&a…...
多表查询综合归纳
目录 1. 多表关系 1.1 一对多(多对一) 1.2 多对多 1.3 一对一 2. 多表查询概述 2.1 熟悉表 2.2 笛卡尔积 2.3 消除笛卡尔积 2.4 多表查询分类 3. 内连接 3.1 隐式内连接 3.2 显式内连接 4. 外连接 4.1 左外连接 4.2 右外连接 5. 自连接 …...
【5.线性表-链式表示-王道课后算法题】
王道数据结构-第二章-链式表示算法题 1.在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。2. 试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设该结点唯一…...
存储过程及练习
1.存储过程 📖什么是存储过程? 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,调用存储过程函数可以简 化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的 效率…...
【在Linux世界中追寻伟大的One Piece】多路转接epoll
目录 1 -> I/O多路转接之poll 1.1 -> poll函数接口 1.2 -> poll的优点 1.3 -> poll的缺点 1.4 -> poll示例 1.4.1 -> 使用poll监控标准输入 2 -> I/O多路转接之epoll 2.1 -> 初识epoll 2.2 -> epoll的相关系统调用 2.2.1 -> epoll_cre…...
设计模式-参考的雷丰阳老师直播课
一般开发中使用的模式为模版模式策略模式组合,模版用来定义骨架,策略用来实现细节。 模版模式 策略模式 与模版模式特别像,模版模式会定义好步骤定义好框架,策略模式定义小细节 入口类 使用模版模式策略模式开发支付 以上使用…...
Python +Pyqt5 简单视频爬取学习(一)
文章目录 前言 一、演示 二、查找网页视频流的索引文件 三、分析视频流的url和视频流索引文件的差异性 四、判断视频数据是否需要转化为ts 五、判断视频是否被加密,如若被加密,需要先解密 六、合并所有的ts视频,以MP4模式输出完整视频 总结 前…...
Python Requests模块全面教程
Python Requests模块全面教程 在现代软件开发中,网络请求是一个不可或缺的部分。无论是获取网页数据、调用API接口,还是进行数据交互,都会涉及到HTTP请求。Python的Requests模块是一个非常强大的库,能够让我们轻松地发送HTTP请求…...
PyQt入门指南六十 与Python其他库的集成方法
PyQt是一个强大的GUI库,它可以与Python的其他库无缝集成,以实现更复杂的功能。以下是一些常见的集成方法和示例: 1. NumPy NumPy是Python中用于科学计算的基础库。您可以在PyQt应用程序中使用NumPy来处理数据和进行数值计算。 import sys …...
Android15之解决:Dex checksum does not match for dex:framework.jar问题(二百三十九)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
