观天下资讯
Article

C语言填空题:指针与内存的奇妙冒险

发布时间:2026-01-28 17:28:01 阅读量:4

.article-container { font-family: "Microsoft YaHei", sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; }
.article-container h1

C语言填空题:指针与内存的奇妙冒险

摘要:本文通过一道精心设计的C语言填空题,考察学生对指针、内存管理和函数指针的理解。题目具有一定的挑战性,能够区分对C语言有深入理解的学生,并附带详细的解题思路和助教的“辛辣”点评,帮助学生更好地掌握C语言。

题目:

请在以下代码的空白处填入适当的内容,使得程序能够正确地分配内存、初始化数组,并使用函数指针完成数组元素的求和。

#include <stdio.h>
#include <stdlib.h>

int sum_array(int *arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int size = 5;
    int *arr = (int *)________(________ * sizeof(int)); // 空格1 & 2

    if (arr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }

    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }

    int (*sum_func)(int *, int) = ________; // 空格3

    int total = sum_func(arr, size);

    printf("数组元素的和为:%d\n", total);

    ________(arr); // 空格4
    arr = NULL;

    return 0;
}

解题思路:

这道题主要考察以下几个知识点:

  1. 动态内存分配: C语言中使用 malloc 函数在堆上分配内存。需要指定分配的内存大小,单位是字节。
  2. 指针类型转换: malloc 函数返回 void * 类型的指针,需要将其强制转换为所需的指针类型(在本例中是 int *)。
  3. 函数指针: C语言允许使用函数指针来指向函数,并将函数作为参数传递给其他函数。需要定义函数指针的类型,并将其指向相应的函数。
  4. 内存释放: 使用 free 函数释放之前分配的内存,防止内存泄漏。释放后,最好将指针设置为 NULL,避免悬空指针。

  5. 空格1: malloc

    • 解释:需要使用 malloc 函数来分配内存。
  6. 空格2: size
    • 解释:需要指定分配的内存大小,这里是 sizeint 类型的大小。
  7. 空格3: sum_array
    • 解释:需要将函数指针 sum_func 指向 sum_array 函数。
  8. 空格4: free
    • 解释:需要使用 free 函数释放之前分配的内存。

完整代码:

#include <stdio.h>
#include <stdlib.h>

int sum_array(int *arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int size = 5;
    int *arr = (int *)malloc(size * sizeof(int));

    if (arr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }

    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }

    int (*sum_func)(int *, int) = sum_array;

    int total = sum_func(arr, size);

    printf("数组元素的和为:%d\n", total);

    free(arr);
    arr = NULL;

    return 0;
}

助教吐槽:

看到这道题,是不是觉得“指针”这两个字格外刺眼? 告诉你,C语言的精髓就在指针和内存管理! 多少人倒在了 mallocfree 的脚下,不是忘了分配内存,就是忘了释放内存,最后程序跑着跑着就崩了。 还有,函数指针这种骚操作,理解了的觉得妙不可言,没理解的直接怀疑人生。 #8388?这数字让我想起我上次帮学生调试内存泄漏问题,整整花了83分钟,最后发现是少了个free(),当时我的心情就像这个8388,无限循环的崩溃。 记住,动态内存分配一定要成对出现,malloc 之后必须要有 free,不然等着被内存泄漏折磨吧! 另外,关于 C语言程序设计 的填空题练习,多做做总没坏处。如果能把 C语言基础练习题 都掌握了,那这门课基本就稳了。还有,别忘了看看 C语言网 上的题目,多刷题才能提高水平。

参考来源: