Administrator
Administrator
发布于 2024-10-06 / 21 阅读
0
0

指针与动态内存分配

1.1 callocmallocreallocfree 的使用

  • 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:用于释放通过 callocmallocrealloc 分配的内存,以避免内存泄漏。调用格式:

    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 语言中的内存分配和指针的使用有所帮助。如果您有更多的具体问题,随时告知!


评论