C语言面试题
【C语言面试题】在C语言面试中,经常会遇到关于语言特性和编程概念的问题。以下是一些关键知识点的详细解释: 1. `static`关键字的作用: -隐藏:`static`修饰的全局变量只在当前源文件内可见,提高了代码的封装性。 -持久性:`static`变量在程序执行开始时初始化,且只初始化一次,存储在静态存储区,生命周期贯穿整个程序。 -默认初始化为0:这同样适用于全局变量,使得静态变量和全局变量在未明确初始化时默认为0。 2.线程与进程的区别和联系: -进程:是系统资源分配的基本单位,拥有独立的内存空间,包含一个或多个线程。 -线程:是程序执行的最小单位,共享进程内的资源,轻量级,切换更快。 -联系:一个进程中可以有多个线程并发执行,同一程序的不同实例形成不同的进程。 3.堆和栈的区别: -栈:由编译器自动分配和释放,主要用于存储局部变量、函数参数和返回地址,内存管理效率高,但空间有限。 -堆:由程序员分配和释放(如果不释放,程序结束时可能由操作系统回收),主要用于动态分配大块内存,管理较复杂,但空间大。 4. C语言判断两个单向无环链表是否相交: -只需比较两个链表的尾节点地址,如果相同,则链表相交;不同则不相交。 5.内存分区分用途: -栈:存放函数参数、局部变量,由编译器管理。 -堆:程序员分配和释放,OS可能在程序结束时回收。 -全局区/静态区:存储全局变量和静态变量,初始化的和未初始化的分开存放。 -常量区:存放字符串常量和其他常量,程序结束释放。 6.引用与指针的区别: -引用是变量的别名,不占内存,指针是一个变量,存储内存地址。 -引用无需解引用,指针需要。 -引用一旦初始化不可改变,指针可以改变。 -引用没有const类型,指针有。 -引用不能为空,指针可以为空。 - `sizeof`引用得变量大小,指针得指针自身大小。 -自增运算意义不同,指针增加是移动指针地址,引用则是增加变量值。 7.编程问题: - (1)程序崩溃,因为`GetMemory`未修改`str`的实际值,`strcpy`会导致空指针异常。 - (2)输出可能是乱码,`GetMemory`返回栈上的地址,离开函数后,栈内存被释放,内容不可预测。 - (3)输出"hello",但因忘记释放内存,导致内存泄漏。 - (4) `Test`函数尝试使用`m`分配的内存,但未展示完整代码,无法确定具体结果。以上知识点涵盖了C语言中的基本概念、内存管理、线程与进程以及指针和引用的使用,这些都是面试中常见的问题。理解并掌握这些知识对于C语言的开发者来说至关重要。
118.8KB
文件大小:
评论区