动态存储分配与malloc函数详解

需积分: 0 0 下载量 173 浏览量 更新于2024-08-20 收藏 731KB PPT 举报
"动态存储分配函数malloc-第8章 指针" 在C语言中,动态存储分配是一个重要的概念,它允许程序在运行时根据需要分配内存。`malloc()`函数是C标准库提供的一种动态内存分配的方法,用于在内存的动态存储区域中为程序分配指定大小的空间。 `malloc()`函数的原型如下: ```c void *malloc(unsigned size); ``` 函数接受一个无符号整型参数`size`,表示要分配的字节数。如果分配成功,`malloc()`会返回一个指向新分配内存起始位置的`void`类型的指针,这使得返回的指针可以被强制转换为任何类型的指针,以便指向任何数据类型的数据。如果分配失败(例如,系统内存不足),`malloc()`则返回`NULL`。 指针是C语言中的核心概念,它们存储的是变量的内存地址,而不是变量的值。指针变量可以用来间接访问和修改它们所指向的变量的值。在第8章"指针"中,我们学习了以下几个关键知识点: 1. 变量、内存单元和地址的关系:每个变量在内存中都有一个唯一的地址,可以通过指针变量来存储和访问这些地址。 2. 定义和使用指针变量:指针变量需要通过类型说明符和星号(*)来定义,如`int *p`表示`p`是一个指向`int`类型变量的指针。使用指针时,需要先将其初始化为某个变量的地址,例如`p = &var`。 3. 指针变量的初始化:初始化指针变量通常涉及将某个变量的地址赋给它,如`int x = 10; int *ptr = &x;`。 4. 指针运算:可以对指针进行解引用(`*`)、加减运算以及比较等操作。解引用操作符`*`允许我们访问或修改指针所指向的变量的值。 5. 指针作为函数参数:指针作为函数参数可以传递大型数据结构或数组,而无需复制整个数据。函数可以通过指针直接修改实参的值。 6. 函数返回多个值:通过指针参数,函数可以返回多个值,因为指针可以指向不同的数据结构或数组,从而实现多种数据的传递。 7. 动态内存分配:`malloc()`、`calloc()`、`realloc()`和`free()`等函数提供了动态内存管理的能力。`malloc()`是其中最基础的一个,用于按字节分配内存。 在示例8-1中,通过指针模拟寻找保险箱密码的过程展示了指针如何用于间接访问和修改内存中的数据。程序创建了一个整型变量`key`并存储了密码,然后定义了一个`int`类型的指针`addr`,并将`key`的地址赋给`addr`。通过`*addr`,程序可以访问`key`的值,即使不直接使用`key`的名称。 地址和指针的概念是理解这一过程的关键。内存中的每个变量都有一个唯一的地址,而指针变量存储的就是这些地址。通过指针,我们可以像在示例中那样,不直接使用变量名,而是通过地址来访问和修改变量的值。 总结起来,动态存储分配和指针是C语言中不可或缺的部分,它们允许程序灵活地管理内存,并提供了强大的数据处理能力。熟练掌握这些概念对于编写高效、灵活的C程序至关重要。