C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )相关的知识,希望对你有一定的参考价值。





一、二级指针



声明二级指针 :

    // 声明二维指针
    char **p = NULL;

1、为 二维指针 分配内存


在堆内存中 , 为 二维指针 分配一块内存空间 , 用于存储 num 个 一维指针 , 每个 一维指针 指向一块内存空间 ;

    // 在堆内存中 , 分配一块内存空间
    // 用于存储 num 个 一维指针
    // 每个 一维指针 指向一块内存空间
    p = (char **)malloc( sizeof(char*) * num );

2、为每个 一维指针 分配内存


通过遍历 , 使用 malloc 函数 在堆内存中 分配 20 字节内存 , 得到一个 一维指针变量 ;

将该 一维指针变量 分别 赋值 二维指针 指向的多个 一维指针变量 ;

通过遍历 , 向 每个 一维指针 变量 指向的内存空间中 ,

    // 遍历 二维指针 指向的多个 一维指针
    // 并为每个 一维指针 在堆内存中 分配 20 字节内存
    for(i = 0; i < num; i++)
    
        // 为每个字符分配 20 字节空间
        p[i] = (char *)malloc(sizeof (char) * 20);
        // 向内存中写入 字符串 , 字符串内容是 i + 1
        // 注意是通过通配符拼装的字符串
        sprintf(p[i], "%d", i + 1);
    

3、释放 二维指针 内存


先释放 二维指针 指向的 一维指针 的内存 , 这些 一维指针 指向其分配的 20 20 20 字节内存空间 , 存放了一个字符串信息 ;

    // 释放内存
    // 先释放 num 个 一级指针
    for(i = 0; i < num; i++)
    
        if(p[i] != NULL)
        
            free(p[i]);
            p[i] = NULL;
        
    

然后再释放 , 二级指针 指向的 内存 , 这些内存中存储这 一级指针 数据 ;

    // 再释放 二级指针
    if(p != NULL)
    
        free(p);
    




二、完整代码示例



完整代码示例 :

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

int main()

    // 二维指针 指向的 一维指针 个数
    int num = 4;

    // 声明二维指针
    char **p = NULL;

    // 循环控制变量
    int i = 0;

    // 在堆内存中 , 分配一块内存空间
    // 用于存储 num 个 一维指针
    // 每个 一维指针 指向一块内存空间
    p = (char **)malloc( sizeof(char*) * num );

    // 遍历 二维指针 指向的多个 一维指针
    // 并为每个 一维指针 在堆内存中 分配 20 字节内存
    for(i = 0; i < num; i++)
    
        // 为每个字符分配 20 字节空间
        p[i] = (char *)malloc(sizeof (char) * 20);
        // 向内存中写入 字符串 , 字符串内容是 i + 1
        // 注意是通过通配符拼装的字符串
        sprintf(p[i], "%d", i + 1);
    

    // 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串
    for(i = 0; i < num; i++)
    
        printf("%s\\n", p[i]);
    

    // 释放内存
    // 先释放 num 个 一级指针
    for(i = 0; i < num; i++)
    
        if(p[i] != NULL)
        
            free(p[i]);
            p[i] = NULL;
        
    

    // 再释放 二级指针
    if(p != NULL)
    
        free(p);
    

    // 命令行不要退出
    system("pause");
    return 0;


执行结果 :

以上是关于C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )的主要内容,如果未能解决你的问题,请参考以下文章

C 语言二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

C 语言二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )

C 语言二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 )

C 语言二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一二 模型数据拷贝到 三 模型中 并 排序 )

C 语言二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )