必背八股文-C/C++(1)
C++与C的区别
思想上:C++是面向对象的语言,C语言是面向过程的结构化编程语言
语法上:
1)C++具有封装、继承、多态三种特性
2)C++增加了许多类型安全功能,比如强制转换类型
3)C++支持范式编程,比如模板类、函数模板等
C++内存管理(程序进程中的分区)
1) 栈区:由编译器自动分配和释放,存放函数的参数、局部变量、返回值等
2) 堆区:一般由程序员分配和释放(malloc/free、new/delete)
3) 代码段:包括只读存储区和文本区,只读存储区存储字符串常量,文本区存储程序的机器代码
4) 数据段:存储程序中已初始化的全局变量和静态变量
5) BSS段:存储未初始化的全局变量和静态变量
若按内存地址的分配角度:全局静态区、文字常量区、程序代码区、堆区、栈区
内存泄漏分类
1) 堆内存泄漏:通过malloc/new等内存分配,但忘了free或delete
2) 系统资源泄露:主要指程序使用系统分配的资源(Bitmap、handle、SOCKET)但没有使用相应的函数释放掉
3) 没有将基类的析构函数定义为虚函数
关键字static的作用
在C/C++中,关键字static有两种用法:
• 修饰变量:使变量在程序运行期间仅被初始化一次,并且作用域只在定义该变量的源文件内部,即静态局部变量和静态全局变量。
• 修饰函数:将函数的作用域限制在定义该函数的源文件内部,即静态函数。
在C语言中,为什么static变量只初始化一次?
静态变量是存储在全局数据区中的变量,程序运行时会在该区域分配一块固定的内存空间,因此静态变量只需要在程序运行期间初始化一次即可。
静态变量什么时候初始化?
静态变量的初始化是在程序执行之前进行的,即在程序加载到内存时就已经完成了初始化,如果没有赋初值,静态变量会默认初始化为0。
简述static对于工程模块化的作用
使用static关键字定义静态变量或者静态函数,可以限制其作用域只在当前源文件内部,这样就可以避免在其他源文件中重复定义同名变量或函数,从而保证程序的模块化和可移植性。
static修饰局部变量和全局变量会有什么效果
1.修饰局部变量:当用于修饰局部变量时,它会改变局部变量的生命周期和存储位置。
• 生命周期:通常情况下,局部变量的生命周期在函数调用期间。当函数返回时,局部变量会被销毁。但是,当局部变量被声明为时,它的生命周期会延长至整个程序运行期间。这意味着在多次调用函数时,局部变量会保留上次调用时的值。
• 存储位置:通常情况下,局部变量存储在栈上。但是,当局部变量被声明为时,它会被存储在静态存储区(或数据段),而不是栈上。
2.修饰全局变量:当用于修饰全局变量时,它会影响变量的可见性和链接。
• 可见性:全局变量的作用域仅限于定义该变量的源文件。这意味着其他源文件无法直接访问此变量。这有助于将变量的作用域限制在本地,避免命名冲突和不小心修改全局变量的问题。
• 链接:全局变量具有内部链接属性。这意味着在链接过程中,该变量不会与其他源文件中的同名变量发生冲突。
extern作用
extern是一个关键字,用于声明一个变量或函数是在其他源文件中定义的,在本文件中不会被分配内存空间,而是在链接时与其他源文件一起链接生成可执行文件。
extern "C"的作用
extern "C"用于声明一段C语言的代码,可以在C++代码中调用这段代码。C++代码和C语言代码的函数调用方式不同,C++使用函数的符号名称包含参数类型信息,而C语言使用函数的符号名称不包含参数类型信息。使用extern "C"可以将C++代码中函数的符号名称修改为C语言的符号名称,使得C++代码可以调用C语言的函数。
const作用
const是一个关键字,用于声明一个变量为常量,即其值在程序运行期间不可修改。const变量在定义时必须进行初始化,否则编译器会报错。
什么情况下使用const关键字?
当程序中的某个变量的值在程序运行期间不应该被修改时,可
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等