【C 语言】二级指针作为输入 ( 自定义二级指针内存

文章目录一、二级指针1、为 二维指针 分配内存2、为每个 一维指针 分配内存3、释放 二维指针 内存二、完整代码示例一、二级指针声明二级指针 :

代码语言:javascript代码运行次数:0运行复制 // 声明二维指针

char **p = NULL;1、为 二维指针 分配内存在堆内存中 , 为 二维指针 分配一块内存空间 , 用于存储 num 个 一维指针 , 每个 一维指针 指向一块内存空间 ;

代码语言:javascript代码运行次数:0运行复制 // 在堆内存中 , 分配一块内存空间

// 用于存储 num 个 一维指针

// 每个 一维指针 指向一块内存空间

p = (char **)malloc( sizeof(char*) * num );2、为每个 一维指针 分配内存通过遍历 , 使用 malloc 函数 在堆内存中 分配 20 字节内存 , 得到一个 一维指针变量 ;

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

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

代码语言:javascript代码运行次数:0运行复制 // 遍历 二维指针 指向的多个 一维指针

// 并为每个 一维指针 在堆内存中 分配 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 字节内存空间 , 存放了一个字符串信息 ;

代码语言:javascript代码运行次数:0运行复制 // 释放内存

// 先释放 num 个 一级指针

for(i = 0; i < num; i++)

{

if(p[i] != NULL)

{

free(p[i]);

p[i] = NULL;

}

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

代码语言:javascript代码运行次数:0运行复制 // 再释放 二级指针

if(p != NULL)

{

free(p);

}二、完整代码示例完整代码示例 :

代码语言:javascript代码运行次数:0运行复制#include

#include

#include

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;

}执行结果 :

Oracle DG同步延迟、报错和配置检查
如何改善交通拥堵问题