动态分配: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 指针是可选的,因为它会自动转换为你赋值给它的类型。
挑战
简单编写一个 C 程序,使用 malloc() 演示动态内存分配,在堆上创建并操作一个整数。你的程序应当:
- 使用
malloc()为一个整数动态分配内存 - 将返回的 void 指针转换为整数指针
- 从用户输入中读取一个整数值
- 使用解引用运算符将输入值存储到动态分配的内存中
- 按以下格式输出存储的值:
Stored value: [value] - 计算该值的平方,并将结果存储在同一内存位置
- 按以下格式输出平方值:
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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器