C语言考研复试常问10个问题

1. 基础概念题

问题:C语言中变量声明变量定义的区别是什么?
答案

  • 声明​(Declaration):告知编译器变量的类型和名称,但不分配内存(如 extern int a;)。
  • 定义​(Definition):分配内存并初始化变量(如 int a = 10;)。
  • 变量可以多次声明,但只能定义一次。

2. 指针与数组

问题:指针和数组名的区别是什么?举例说明。
答案

  • 数组名是常量指针,指向数组首元素地址(如 arr等价于 &arr[0]),不可修改;指针是变量,可以指向不同地址。
    int arr[5] = {1,2,3};
    int *p = arr;
    p++;     // 合法,指向arr[1]
    arr++;   // 非法,数组名是常量

3. 内存管理

问题mallocfree的作用是什么?如何避免内存泄漏?
答案

  • malloc动态分配堆内存(如 int *p = (int*)malloc(10*sizeof(int))),free释放内存(free(p))。
  • 避免内存泄漏
    1. 确保每次malloc后都有对应的free
    2. 指针释放后置为NULLp = NULL)。
    3. 避免重复释放或访问已释放的内存。

 

4. 文件操作

问题:C语言中fopen的打开模式"r""rb"有何区别?
答案

  • "r":以文本模式打开文件(读取时会进行换行符转换,如Windows下\r\n\n)。
  • "rb":以二进制模式打开文件(直接读取原始字节,无转换)。
  • 跨平台文件操作建议使用二进制模式避免兼容性问题。

5. 函数与递归

问题:递归函数的优缺点是什么?举例说明。
答案

  • 优点:代码简洁,适合解决分治类问题(如阶乘、斐波那契数列)。
  • 缺点
    1. 递归深度过大可能导致栈溢出。
    2. 重复计算可能降低效率(如斐波那契递归未优化时时间复杂度为O(2^n))。

 

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n-1);  // 递归调用
}

6. 结构体与共用体

问题:结构体(struct)和共用体(union)的内存布局有何不同?
答案

  • 结构体:成员占用独立内存空间,总大小为所有成员大小之和(考虑对齐)。
  • 共用体:所有成员共享同一块内存,大小为最大成员的大小。

7. 函数指针应用

问题:函数指针有什么实际用途?举例说明。
答案

  • 用途:实现回调函数、动态绑定(如排序算法中传递比较函数)。

 

8. 预处理指令

问题#include <stdio.h>#include "myheader.h"的区别是什么?如何避免头文件重复包含?
答案

  • ​**< >**:搜索系统目录(如/usr/include)。
  • ​**" "**:先搜索当前目录,再搜索系统目录。
    #ifndef MYHEADER_H
    #define MYHEADER_H
    // 头文件内容
    #endif

 

9. 算法实现题

问题:写一个函数实现字符串反转(原地修改,不额外分配内存)。
答案

void reverse_str(char *str) {
    if (str == NULL) return;
    int len = strlen(str);
    for (int i = 0; i < len/2; i++) {
        char temp = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = temp;
    }
}

 

10. 高级概念

问题const关键字在C语言中的作用有哪些?
答案

  1. 修饰变量:const int a=5; 变量不可修改。
  2. 修饰指针:
    • const int *p:指针指向的值不可变。
    • int *const p:指针本身不可变。
  3. 修饰函数参数:避免函数内意外修改数据(如 void func(const char *str)

祝各位考研上岸记得点关注哦!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值