1. C和C++有哪些区别
面向对象
C支持面向过程编程。
C++支持面向对象编程(OOP),如类和对象,继承,多态等。
面向对象:面向对象编程就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
面向过程:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用的时候一个一个的依次调用就可以了。
虽然C语言不直接支持面向对象编程,但通过结构体和函数指针的组合,可以实现类似于面向对象的特性,如类和封装、继承和多态。这种方式在某些嵌入式系统编程中比较常见)
1.用结构体表示类,并在其中包含数据成员和函数指针。
2.继承可以通过在结构体中嵌套另一个结构体来实现。
3.多态性可以通过函数指针来模拟。》
标准库
C++的标准库比C的丰富得多,包括STL(标准模板库)
函数重载和模板
C++支持函数重载和模板,而C不支持。
命名空间
C++有命名空间(namespace)机制,C没有。
异常处理
C++有异常处理机制,C没有
2. C和C++中内存分为哪些区域
堆(Heap
栈(Stack)
全局/静态区(Global/Static Area
常量区(Constant Area)
代码区(Code Area)
3. 分别存放什么东西
堆: 动态分配的内存,如`malloc`(C)或`new`(C++)。
栈: 局部变量和函数调用信息。
全局/静态区: 全局变量和静态变量。
常量区: 字符串常量和其他常量。
代码区: 程序的机器指令。
4. 什么是内存泄露
内存泄露是指程序在动态分配内存后没有释放,导致内存一直被占用且不可用。
5. 怎么样避免内存泄露
使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)。
养成良好的编码习惯,确保每次分配内存后及时释放。
使用工具如Valgrind来检测内存泄露。
6.Volatile关键字
volatile`关键字告诉编译器该变量可能会被程序外部修改,编译器不应优化对它的读写操作。
7. 如果不用的话,他有可能从什么地方读
如果不使用`volatile`,编译器可能会优化代码,导致程序从寄存器中读取旧值而不是从内存中读取最新值。
8. Sizeof,作用于数组,作用于指针呢
对数组,`sizeof`返回数组的总字节数。
对指针,`sizeof`返回指针本身的大小(在64位系统上通常是8字节)
9. 64位的一个int,我要获取他的第23位
- 使用位操作:`(num >> 23) & 1`。
10. **共用体和结构体的区别**
- **共用体**: 所有成员共享同一块内存,修改一个成员会影响其他成员。
- **结构体**: 每个成员有自己独立的内存。
11. C++中修饰可访问性的关键字
public`, `protected`, `private`
12. Static关键字
- **静态变量**: 变量的生命周期贯穿程序始终。
- **静态函数**: 只能在定义它的文件中访问。
13. **性能优化在你项目中有没有体现**
- 具体举例说明你在项目中做过的性能优化,比如算法优化、内存管理、并行计算等。
14. **编译步骤**
- **预处理**: 宏展开,文件包含等。
- **编译**: 生成汇编代码。
- **汇编**: 生成目标代码。
- **链接**: 生成可执行文件。
15. **在一个函数A中调用函数B,怎么知道调用完B之后返回函数A**
- 通过函数调用栈,函数A的返回地址被保存,当函数B执行完后,控制权回到函数A。
16. Linux常用命令
`ls`, `cd`, `cp`, `mv`, `rm`, `chmod`, `ps`, `grep`, `find`, `tar`, `gzip`
17. Chmod后面的三个数字分别代表什么
用户(user), 组(group), 其他人(others)的权限。
18. 查看文件的前n行
`head -n <number> <file>`
19. 当前脚本窗口关掉之后,怎么让这个脚本在后台执行
默认情况下,当退出一个终端会话时,终端会发送一个 HUP(hangup)信号给所有在该会话中启动的进程,这通常会导致这些进程终止
,所以可以使用`nohup <command> &。其中&用于将该命令放到后台运行。
20. 获取单向链表的倒数第n个节点
使用双指针法,一个指针先走n步,然后两个指针一起走,直到前面的指针到达末尾。
21. 二叉树的怎么进行层序遍历
使用队列来实现,先将根节点入队,然后不断出队,并将其子节点入队。
标签:函数,静态,步骤,技术,C++,内存,简答,指针 From: https://blog.csdn.net/weixin_58298518/article/details/140197533