1、嵌入式与单片机的区别
从软件上,行业里经常把芯片中不带MMU(Memory Management Unit内存管理单元)从而不支持虚拟地址,只能裸奔或运行RTOS(实时操作系统,例如ucos、华为LiteOS、RT-Thread、FreeRTOS)的system,叫做单片机(例如STM32、NXP)
而把芯片自带MMU可以支持虚拟地址,能够跑Linux、Vxworks、WinCE、Android这样的“高级”的system,叫做嵌入式
2、Heap(堆)和Stack(栈)的区别
Heap(堆)上的空间是手动分配和释放的,Stack(栈)上的空间是自动分配和释放的
3、全局变量和局部变量的区别
1、作用域不同:全局变量作用域为整个程序,局部变量的作用域为当前语句块;
2、内存存储方式:全局变量在全局数据区(静态数据区),局部变量存储在栈上;
3、生命周期不同:全局变量的生命周期和程序周期一样,局部变量随着语句块的结束而结束;
4、当局部变量和全局变量同名时,优先使用局部变量,使用全局变量是要用域成员运算符;
4、结构体和联合体的区别
1、结构体和联合体都是由不同的数据类型组成,但在任何时候,联合体只存在一个被选中的成员,结构体的所有成员都存在;
2、在结构体中,各成员占有自己的存储空间,总大小等于各成员的大小之和;
3、在联合体中,所有成员共用一块存储空间,其大小等于联合体中最大成员的大小;
5、数组和指针的区别
1、指针要么在静态存储区,要么在栈上被创建。数组名对应着一块内存,其容量与地址在生命周期内保持不变;
2、指针可以随时指向任意类型的内存块,它的特征是可变,比数组灵活,但也危险;
6、指针函数和函数指针的区别
1、指针函数是一个函数,它返回值是一个指针;
2、函数指针是一个指针,这个指针所指的对象是一个函数;
7、常量与变量的区别
1、常量是只读不可写,变量可读可写;
2、常量必须初始化,变量可以不初始化;
3、常量不可以寻址,它的地址不可赋给非常量指针,变量可以寻址;
8、指针自增自减与变量自增自减有什么区别
指针自增自减是改变指针所指的对象;变量自增自减是改变变量的值。
9、#error的作用是什么
编译程序时,只要遇到#error就会跳出一个编译错误
10、#include #include 头文件中的 ifdef /define endif的作用:防止头文件被重复引用。 10、常见的条件语句比较写法 1、bool类型 if(flag)建议使用 2、int类型 if(value != 0)建议使用 3、float if( x > -EPSION && x < EPSION )建议使用 4、指针 if(p == NULL)建议使用,强调p为指针;不建议if(p == 0)会让人误解为int类型 11、用#define实现宏并求最大值最小值 12、break语句与continue语句有什么区别 continue语句只能出现在循环语句中,表示结束本次循环;break语句还可以出现在switch语句中,表示结束switch语句。在循环语句内表示结束整个循环。 13、static关键字的作用 1、用于全局变量:表示该变量是静态全局变量。作用域为当前文件; 2、用于函数:该函数为静态函数,只能在本文件中调用。静态函数在内存中只有一份,普通函数在内存中维持一份拷贝; 3、用作局部变量:为静态局部变量,只初始化一次。之后调用函数都是上次函数退出时的值。即改变变量的生存周期为整个程序运行的时间段内; 4、static成员函数:表示这个函数属于此类而不属于此类的任何对象,不能访问非静态变量和函数,该函数在该类中是唯一的。 14、const关键字的作用 1、修饰一般变量和数组:修饰符可在类型说明符前,也可在类型说明符后; 2、修饰常指针: const修饰指针指向的对象,指针可变,指针指向的对象不变 const修饰指针指向的对象,指针可变,指针指向的对象不变 const修饰指针,指针不可变,指针指向的对象可变 15、const与宏的区别 1、编译时刻:宏在预编译时刻,const在编译时刻; 2、编译检查:宏不会编译检查,const有编译检查 3、宏可以定义函数、方法等,const不可以 4、大量使用宏会导致预编译时间过长 16、带参宏与函数的区别 1、处理时刻不同:宏在编译时刻,函数在运行时刻; 2、带参宏没有参数类型,函数具有参数类型; 3、带参宏不分配内存,函数需要分配内存; 4、宏不占用运行时间,函数在调用时刻和返回时刻占用时间; 17、引用与指针的区别 1、非空区别:指针可以指向NULL,引用必须指向某个对象; 2、可修改区别:指针可以指向不同的对象,引用总是指向初始化的对象; 3、合法性区别:在使用指针之前要判断指针是否为NULL,引用不需要判断; 18、malloc()与colloc()的区别 1、malloc()与colloc()都是在堆上申请动态内存空间; 2、malloc()只有一个参数,即要分配内存大小; 3、colloc()函数有两个参数,分别是元素的个数与元素的大小; 4、malloc()不能对内存初始化,colloc()对内存的每一位初始化为0; 19、strcpy 、sprint、 memcpy函数的区别 strcpy 函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝; sprint函数操作的对象不限于字符串,是实现其他数据类型吸纳高字符串的转化。方法中需要指定数据源对象的数据类型,如果源对象是字符串,也可以实现字符串的拷贝功能。 memcpy内存的拷贝,实现将一个内存的内容复制到另一个内存块,内存块由首地址及长度决定。 20、strcpy函数为什么要返回char *类型 增加代码的灵活性,方便其他函数直接调用 21、new delete与malloc free的联系与区别 1、都是在堆上进行动态内存的分配与释放; 2、new delete是C++的运算符,malloc free是函数; 3、new会自动调用对象的构造函数,返回相应的类型; 4、malloc只会申请指定大小的内存,返回void *类型,不能初始化对象; 5、delete与new配对,会调用析构函数; 6、free与malloc配对,只是内存的释放,不会调用析构函数; 22、关于静态内存的分配和动态内存的分配的区别及过程 1、静态内存的分配是在编译时刻完成的,不占CPU资源。动态内存的分配是在运行时刻完成的,分配与释放占用CPU运行时间; 2、静态内存分配是在栈上完成的,动态内存分配是在堆上完成的; 3、动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要; 4、静态内存的分配是按照计划分配的,在编译前确定内存块的大小;动态内存分配运行时按需分配; 5、静态内存分配是把内存的控制权交给了编译器;动态内存分配是把内存的分配交给了程序员; 6、静态内存分配的效率比动态分配内存的效率高,因为动态内存的分配与释放需要额外的开销;动态内存管理水平,严重依赖于程序员的水平,处理不当容易造成内存泄漏; 23、一个短小的函数在C与C++中分别用什么实现 在C中用宏实现,在C++中用内联函数实现 24、在C++程序中调用被C编译器编译后的函数,为什么要加extern C C++语言支持函数的重载,C语言不支持函数的重载,编译后参数的名字不同,函数被C++编译器编译后产生的名字为函数名加参数列表类型名之类的名字。 而C编译器编译后产生的名字为函数名。 25、一个由C/C++编译器编译过的程序由哪几部分组成 1、栈区:由编译器自动编译、释放、存储函数参数的值、局部变量的值等,其操作方式类似于数据结构; 2、堆区:由程序员分配与释放,如果程序员没有释放,在程序结束时由OS释放,存储结构类似于链表; 3、全局变量和静态变量存储在一起 4、文字常量区:常量、字符串存放于此,程序结束后自动释放; 5、程序代码区:存放函数的二进制代码#define MAX(x,y) ((x)>(y))?(x):(y)
#define MIN(x,y) ((x)<(y))?(x):(y)
const int *A;
int const *A;
int * const A;
上一篇:关于定时器、波特率、TH和TL值的计算
下一篇:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器概念
推荐阅读最新更新时间:2024-11-12 13:38
设计资源 培训 开发板 精华推荐
- 课设-电感式传感器V2.0
- AOZ1280 EZBuck 1.2A 简单降压稳压器的典型应用
- TWR-KV11Z75M:Kinetis®KV1x FamilyTower®系统模块
- Extend Board
- NUCLEO-F401RE,STM32 Nucleo 开发板,带有 STM32F401RET6 MCU,支持 Arduino 和 ST morpho 连接
- LT3089ER 升压固定输出线性稳压器的典型应用电路
- 用于 48V、500W 电动自行车/踏板车的 LTC2992HDE 功率监视器的典型应用
- LTC3630AMPDHC 5V 至 76V 输入至 5V 输出、高效率、500mA 稳压器的典型应用电路
- NSI45025ZT1G 用于基本交流应用的恒流 LED 驱动器的典型应用
- 基于STM32的万用手表