Menu
CoddyTech

动态分配:malloc()

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 32 课,共 63 课。

现在,你将学习 malloc(),它是在程序运行期间向堆申请内存的主要函数。malloc() 函数表示“内存分配”,它允许你在需要时动态分配内存,而不是在编译时声明固定大小的变量。

malloc() 函数接受一个参数:你想要分配的字节数。它会返回一个指向已分配内存块的void 指针,如果分配失败,则返回 NULL。由于它返回的是 void 指针,你可以直接将它赋值给有类型的指针;在 C 中,类型转换是可选的(与 C++ 不同,C++ 要求进行类型转换)。

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // 为一个整数分配内存
// ptr 现在指向一块可以存放整数的内存

malloc() 的主要优势是灵活,你可以在程序运行时准确申请所需的内存量,并且这些内存会一直可用,直到你明确释放它们。这在你无法事先确定程序运行时需要多少内存的情况下尤其有用。

记得包含 <stdlib.h> 以使用 malloc()。在 C 中,转换返回的 void 指针是可选的,因为它会自动转换为你赋值给它的类型。

challenge icon

挑战

简单

编写一个 C 程序,使用 malloc() 演示动态内存分配,在堆上创建并操作一个整数。你的程序应当:

  1. 使用 malloc() 为一个整数动态分配内存
  2. 将返回的 void 指针转换为整数指针
  3. 从用户输入中读取一个整数值
  4. 使用解引用运算符将输入值存储到动态分配的内存中
  5. 按以下格式输出存储的值:Stored value: [value]
  6. 计算该值的平方,并将结果存储在同一内存位置
  7. 按以下格式输出平方值:Squared value: [value]

记得包含 <stdlib.h> 头文件,以便使用 malloc()。你的程序应展示动态内存分配的基本流程:向堆申请内存,用它存储和处理数据,并通过指针操作使用已分配的内存。

例如,如果用户输入 7,输出应为:

Stored value: 7
Squared value: 49

这个挑战将向你介绍动态内存分配这一基本概念。内存是在运行时申请的,而不是在编译时固定分配的,因此程序在使用内存时会更加灵活。

亲手试试

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

int main() {
    // 读取输入
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: 在下方编写你的代码
    // 1. 使用 malloc() 为一个整数分配内存
    // 2. 将返回的指针转换为 int*
    // 3. 将输入值存入分配的内存
    // 4. 输出存储的值
    // 5. 计算平方,并将结果存入同一位置
    // 6. 输出平方后的值
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器