【C语言敲重点(五)】嵌入式“八股文“(2)

news2024/11/26 15:42:59

1. struct和union的区别?

答:①联合体所有的成员都共享一块内存,修改联合体的任一成员的数据就会覆盖到其他成员的数据;
②结构体的成员变量都有独立的内存空间,且结构体的成员数据之间是不影响的

2. struct和class的区别?

答:①访问权限不同:class默认是私有的private,struct默认是公共的public
②继承权限不同:class默认是私有的private,struct默认是公共的public
③class可以用于定义模板,而struct不能

3. 指针和地址偏移问题

int main(){
    unsigned char *p1;
    unsigned long *p2;
    p1 = (unsigned char *)0x801000;
    p2 = (unsigned long *)0x810000;
    //p1+5偏移sizeof(unsigned char)*5 = 1*5
    printf("p1+5 = %p\n",p1+5); //答案:0x801005
    //p1+5偏移sizeof(unsigned long)*5=8*5=40(十进制)= 28(十六进制)
    printf("p2+5 = %p\n",p2+5); //答案:0x810028
    return 0;
}

4. 宏定义的陷阱 – “无脑替换”

#define CUBE(x)     x*x*x
int main(){
    int a = 3;
    printf("%d\n", CUBE(a)); //CUBE(a) = a*a*a = 27
    //CUBE(a+1) = a+1*a+1*a+1 = a+a+a+1 = 10
    printf("%d\n", CUBE(a+1));
    return 0;
}

5. 大小端字节序判断

  • 大端字节序:高地址存放数据的低位(网络字节序)
  • 小端字节序:高地址存放数据的高位(X86 PC)
union Test{
    short a;
    char b[2];
};

int main(){

    union Test test;
    test.a = 0x1234;
    if(test.b[0] == 0x12){  //低地址放高位
        printf("Big Endian\n");
    }
    if(test.b[0] == 0x34){  //低地址放低位
        printf("Small Endian\n");
    }

    return 0;
}

6.【面试真题】

  • 在X86架构的PC机上,下列程序输出结果是( A )

在这里插入图片描述

7. 枚举enum的赋值规则

在这里插入图片描述
在这里插入图片描述

8. 左值(lvalue)和右值(rvalue)的区别?

答:①左值:表示一个可被标识和修改的内存位置,可以出现在=左边的变量,其值可以改变,存储在内存中具有持久性。(典型的左值包括变量、数组元素和通过引用或指针访问的对象)
②右值:不能被赋值的常量、表达式,特点是可读。一般是临时的中间值或者常量。
③通常左值可以做右值,右值不能做左值(如:i++ = 5的写法是错误的)
注意:数组名是常量,不能被赋值,也就是数组名是右值。
(当定义char array[10] = “hello”时,array++和array=array+1都是错误的写法)
(区别定义char *array = “hello”时,array++和array=array+1的写法是允许的)

9. ++a和a++的区别?

  • 如果有表达式 a = i++ ;它等价于 a = i;i = i + 1(先赋值再自增,右值)
  • 如果有表达式 a = ++i;它等价于i = i + 1;a = i(先自增再赋值,左值)
    在这里插入图片描述

10. 在1G内存的PC中能否malloc(1.2G)?为什么?

答:可能可以。因为malloc是向进程申请虚拟内存,与物理地址空间没有直接关系。

11. 数组的负数下标

【面试真题】 写出下面程序的输出结果:0 1 2 3 4 5
在这里插入图片描述

12. 判断有符号、无符号整数

【面试真题】 写出判断一个整数是否是无符号整数的宏定义:
在这里插入图片描述

13. select、poll和epoll的区别?

答:①select相比于poll和epoll,支持跨平台可移植性好;但是select的实现是依赖轮询机制,且每次调用都需要在用户态和内核态之间复制拷贝所有文件描述符,因此效率比较差,并且监听的最大文件描述符数量也有限制,一般是1024个。
②poll在select的基础上,有了一定的改进和优化;但是底层实现机制和select一样,在效率上并没有大的提升。
③epoll相比于前面select和poll,可以说是最高效最常用的。它是基于内核事件驱动机制实现对事件的监听,底层通过红黑树和链表来存储监听的文件描述符和事件,当监听到事件发生,以消息通知的机制处理对应的文件描述符,避免了前面select和poll轮询机制的缺点,提高了效率,且没有文件描述符数量的限制。

14. 面向对象三大特征

继承、封装、多态

在这里插入图片描述

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

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

相关文章

HTTPS——HTTPS如何加密数据,“证书“为什么可以应对 “中间人攻击“

文章目录 前言一、HTTPS是什么二、HTTPS加密方法三、HTTPS加密流程对称加密非对称加密中间人攻击证书 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习&…

Linux笔记——管道相关命令以及shell编程

文章目录 管道相关命令 目标 准备工作 1 cut 1.1 目标 1.2 路径 1.3 实现 2 sort 2.1 目标 2.2 路径 2.3 实现 第一步: 对字符串排序 第二步:去重排序 第三步: 对数值排序 默认按照字符串排序 升序 -n 倒序 -r 第四步: 对成绩排序【按照列排序】 …

python实现逻辑回归-清风数学建模-二分类水果数据

所用数据 👉👉👉二分类水果数据 1.数据预处理 可以看到有4个特征,2种分类结果,最后4个没有分类结果的数据是拿来预测的 # 1. 数据预处理 import pandas as pd df pd.read_excel(oridata/二分类水果数据.xlsx,use…

启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 Windows操作系统作为应用最广泛的个人电脑操作系统,在我们身边几乎随处可见。虽然近些年因手机、平板电脑等设备的兴起,个人电脑的存在感逐渐降低,但对于一些大型程序和特殊情况(办公软件、…

超细Python性能测试实战,Locust框架性能测试(详全)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 当涉及到评估应用…

《零基础入门学习Python》第062讲:论一只爬虫的自我修养10:安装Scrapy

这节课我们来谈谈 Scrapy 说到Python爬虫,大牛们都会不约而同地提起Scrapy。因为Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 Scrapy最初是为了页面抓…

【微信小程序】使用iView组件库中的icons资源

要在微信小程序中使用iView组件库中的icons资源,需要先下载并引入iView组件库,并按照iView的文档进行配置和使用。 以下是一般的使用步骤: 下载iView组件库的源码或使用npm安装iView。 在小程序项目的app.json文件中添加iView组件库的引入配…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验,单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

qs库的使用

前言 qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列化成一个查询字符串,或者反过来可以将一个查询字符串解析成一个object,而且支持复杂的嵌套。在工作中,最经常使用qs的地方就是请求参数格式转换的时候,但是…

QT通过TCP协议发送结构体数据

文章目录 前言1. memcpy方式1.1 发送整个结构体1.2 发送部分数据 2. QDataStream2.1 符号<<2.2 wrieteRawData 总结 前言 做上位机的时候下发数据&#xff0c;数据是一个结构体&#xff0c;这里就阐述一下怎么通过TCP协议发送结构体。 我自己写的时候主要通过两种方式&a…

K8S初级入门系列之五-Pod的高级特性

一、前言 前一篇我们了解了Pod的基本概念和操作&#xff0c;本篇我们继续研究Pod的一些高级特性&#xff0c;包括Pod的生命周期&#xff0c;pod探针&#xff0c;pod的调度等。 二、生命周期 1、Pod的生命周期 Pod的生命周期示意图如下&#xff1a; 挂起(Pending)&#xff0c…

webpack配置externals汇总

webpack5.88.1 vue2.7.14 vue-router3.6.5 element-ui2.15.13 ant-design-vue1.7.8 externals用于提取第三方依赖包&#xff0c;使用cdn资源的方式将第三方依赖包引入项目&#xff0c;可以大大减少项目打包体积 配置externals对象有技巧&#xff1a; key 就是 import aaa from …

No3: 学习过程中故障成长积累

文章目录 故障积累1、编码错误导致 故障积累1、编码错误导致

JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

一、版本roadmap图 官方地址&#xff1a; https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出&#xff0c;JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看&#xff0c;JDK8到2023年已经有将近10年的历史了&#…

C++笔记之使用STL的function实现回调机制

C笔记之使用STL的function实现回调机制 code review! 文章目录 C笔记之使用STL的function实现回调机制1.使用普通函数2.使用匿名函数&#xff08;Lambda表达式&#xff09;3.使用函数对象&#xff08;functor&#xff09;4.运行输出 1.使用普通函数 代码 #include <funct…

【C++杂货铺】运算符重载

目录 前言一、运算符重载二、赋值运算符重载三、完善日期类3.1 重载关系运算符3.2 重载、3.3 重载-、-3.4 重载、--3.5 重载<<、>> 四、const成员五、取地址及const取地址操作符重载 前言 本文将以日期类为基础&#xff0c;去探寻运算符重载的特性与使用方法&…

小程序如何删除/修改/上下架分类

删除、修改或上下架小程序中的分类可以帮助商家更好地管理和调整分类展示。下面将介绍如何在小程序中删除、修改或上下架分类的操作步骤。 在小程序管理员后台->分类管理&#xff0c;可以看到处于上架和下架状态的分类。 删除&#xff1a;点击分类上的删除按钮&#xff0c;…

vscode使用g++编译.c文件或.cpp文件

vscode是一个跨平台、轻量级、插件非常丰厚的IDE&#xff0c;这里介绍在vscode里使用g来编译.cpp文件。g也叫GCC, 在Window中&#xff0c;是使用MinGW方式实现g的&#xff0c;它分为32位和64位2个版本&#xff0c;其中&#xff0c;MinGW-64是64位的&#xff0c;MinGW-32是32位的…

qt MainWindow设置layout失效

错误的做法&#xff1a;直接把layout设置到MainWindow上 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QVBoxLayout *mainLayout new QVBoxLayout();QPushButton *btn1 new QPushButton("aa", t…

VRIO模型

VRIO模型 由美国学者Jay B.Barney 1991年在《企业资源和持续竞争优势》中提出的&#xff0c;是一个战略规划工具&#xff0c;一般用于评估和分析企业的内部资源&#xff0c;并利用这些资源获得持续的竞争力。 模型介绍 该模型指出了有四个因素对持久的竞争优势产生了影响&…