C/C++面试八股文精讲:从指针到网络编程的实战要点

张开发
2026/4/21 21:11:04 15 分钟阅读

分享文章

C/C++面试八股文精讲:从指针到网络编程的实战要点
1. 指针C/C的灵魂操作指针是C/C最核心也最让初学者头疼的概念。我当年第一次接触指针时完全不明白这个地址到底有什么用。直到后来做图像处理项目时需要直接操作内存中的像素数据才真正体会到指针的强大。指针变量本质上就是存储内存地址的容器。比如int *p a这里的p就保存了变量a的内存首地址。几个关键点需要注意32位系统下指针固定占4字节64位系统占8字节未初始化的指针就像野马使用会导致程序崩溃指针运算时p1实际移动的是sizeof(类型)的字节数实际面试中常被问到的典型问题int a[5] {1,2,3,4,5}; int *p (int*)(a 1); printf(%d, *(p-1)); // 输出什么这个例子考察的是指针运算和数组内存布局的理解。a取到的是整个数组的地址1会跳过整个数组所以p-1指向的是最后一个元素5。2. 内存管理从五大分区到常见陷阱C/C程序运行时内存会被划分为五个关键区域栈区自动管理存放局部变量和函数调用信息堆区手动管理通过malloc/new动态申请全局区存放全局变量和静态变量常量区存放字符串常量等只读数据代码区存放程序执行的二进制指令面试中最容易翻车的是内存泄漏问题。比如下面这个看似无害的函数char* getBuffer() { char buffer[100]; return buffer; // 严重错误 }这个函数返回了栈内存的指针当函数返回后这块内存就会被回收。正确的做法应该是在堆上分配内存char* getBuffer() { char* buffer (char*)malloc(100); return buffer; // 记得调用者要free }3. 字符串处理安全第一字符串操作是面试必考点也是实际项目中最容易出安全问题的地方。strcpy这类不安全的函数现在基本都被strncpy_s等安全版本替代。几个常见陷阱strlen计算长度时不包含结尾的\0strcmp比较的是ASCII码值不是长度strcat前必须确保目标缓冲区足够大我曾经在项目中就遇到过因为strcpy导致的内存越界问题最后用以下方式解决#define SAFE_COPY(dest, src, size) \ strncpy_s(dest, size, src, _TRUNCATE)4. TCP/IP网络编程核心要点网络编程是C/C面试的高频考点特别是TCP的三次握手和四次挥手。用日常场景来理解三次握手就像打电话A打给B喂听得到吗B回复听得到你听得到我吗A确认我也听得到四次挥手就像结束通话A说我说完了B确认好的B也说我也说完了A最后确认好的实际编程中要注意// 设置SO_REUSEADDR避免TIME_WAIT状态 int opt 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, opt, sizeof(opt));5. 进程与线程如何选择选择进程还是线程就像选择坐公交还是打车进程像公交车独立路线地址空间安全但开销大线程像拼车共享路线内存空间高效但要协调在多核处理器上我通常这样选择CPU密集型任务用多进程避免GIL问题I/O密集型任务用多线程减少上下文切换开销一个实际项目中的经验当需要处理上千个并发连接时使用epollI/O多路复用配合线程池比纯多线程或纯多进程方案性能提升明显。6. 常见面试题精析最后分享几个我面试别人时必问的题目问题1sizeof和strlen有什么区别sizeof是运算符编译时确定计算内存大小strlen是函数运行时计算找\0位置问题2如何判断系统是大端还是小端int checkEndian() { int num 1; return *(char*)num 1; // 返回1是小端 }问题3写一个带长度检查的安全字符串拷贝函数void safe_strcpy(char* dest, const char* src, size_t size) { if(size 0) return; size_t i; for(i 0; i size-1 src[i]; i) { dest[i] src[i]; } dest[i] \0; }在准备C/C面试时建议把这些核心概念自己动手实现一遍比单纯背诵要有效得多。我在招聘时更看重候选人是否能解释清楚代码背后的原理而不仅仅是写出正确答案。

更多文章