1.1 calloc
、malloc
、realloc
、free
的使用
calloc
:用于分配内存,并自动将分配的每个字节初始化为0
。调用格式:void* ptr = calloc(num_elements, element_size);
它分配一个大小为
num_elements * element_size
字节的内存块,并初始化为0
。malloc
:用于分配内存,但分配的内存不会被初始化。调用格式:void* ptr = malloc(size_in_bytes);
分配一个大小为
size_in_bytes
字节的内存块,内存中的数据是未定义的。realloc
:用于调整已分配内存块的大小。它可以扩大或缩小内存块的大小。调用格式:void* ptr = realloc(existing_ptr, new_size_in_bytes);
如果内存扩展,可能会移动到新的位置;如果缩小则保持内容不变。
free
:用于释放通过calloc
、malloc
、realloc
分配的内存,以避免内存泄漏。调用格式:free(ptr);
被释放的内存指针应指向有效的动态分配内存,否则可能导致未定义行为。
所有这些函数都需要包含头文件:
#include <stdlib.h>
1.2 指针的使用
指针:是一个存储内存地址的变量。指针变量指向一个地址,而非具体的数据值。
使用
&
运算符可以获取变量的地址,例如:int a = 10; int* ptr = &a; // ptr 存储变量 a 的地址
使用
*
运算符可以解引用指针,访问指针指向地址处的值:int value = *ptr; // 通过解引用访问 a 的值
在定义指针变量时,
*
仅仅是用来标识这是一个指针,例如:int* p; // 定义一个指向整型的指针
此时
*
只是类型说明符的一部分,并不表示解引用操作。
1.3 指针函数
指针函数:指的是返回类型为指针的函数。它的定义格式如下:
int* function_name();
这种函数返回一个地址,可以用来返回动态分配的内存或其他指针类型的值。
指针数组:可以用指针来创建数组,例如将多个函数的地址存放在指针数组中,以方便调用:
int (*func_ptr_array[3])();
这表示一个数组,其中每个元素都是一个指向返回整型的函数的指针。
希望这部分信息对您理解 C 语言中的内存分配和指针的使用有所帮助。如果您有更多的具体问题,随时告知!