指针数组的应用(malloc申请)
学习指针数组后结合题目写了一些代码,留下记录
需求描述:
要求先输入要几套方案,每套方案都有五种类型的卷子
再依次输出每套方案的配备
五个参数分别是 A B C D E类型的卷的数目
再对每个方案各类型卷子进行计算,计算出最后能组成多少种输出方案(因为忘记具体要求本代码中只是再输出了每套卷子方案的具体值)
思路逻辑,内存图解析


代码实现
//头文件引用
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//需求要求先输入要几套方案
//再依次输出每套方案的配备 五个参数分别是 A B C D E类型的卷
int main(void)
{
int numbers;
printf("请输入你想要创建几套方案\n");
//先输入要几套方案
scanf_s("%d", &numbers);
printf("你需要的方案数量为%d\n下面请依次输入每个方案的卷子数目\n",numbers);
//把每一套方案都存在一个数组中
//先申请一个指针数组,数组中的每个值都是一个地址,地址的值指向我们新申明的一个数组中,数组中的数字为卷子数目
int** method = (int**)malloc(sizeof(int*) * numbers);//method指向一个指针数组
if (NULL == method)
{
return 0;
}
//分配method[]中的数组的指向
for (size_t i = 0; i < numbers; i++)
{
int* temp = NULL;
temp = (int*)malloc(5*sizeof(int) ); //使用临时指针去装一下新malloc的地址,其中的值是卷子数目
if (NULL == temp)
{
return 0;
}
*(method + i) = temp; //再把这个地址装在指针数组中
}
for (size_t i = 0; i < numbers; i++)
{
printf("请输入第%d套的配置数目\n",i+1);
for (size_t j = 0; j < 5; j++)
{
scanf_s("%d", *(method + i) + j );
}
}
printf("============================\n");
for (size_t i = 0; i < numbers; i++)
{
printf("\n第%d套的配置数目为\n",i+1);
for (size_t j = 0; j < 5; j++)
{
printf("%d\t", *(*(method + i) + j));
}
}
for (size_t i = 0; i < numbers; i++)
{
free(*(method + i));
}//需要释放掉空间防止变为空间碎片
free(method);
system("pause");
return 0;
}
这篇博客介绍了如何使用C语言通过动态内存分配来创建一个指针数组,用于存储多套方案中每套方案的卷子数量。博主首先通过`malloc`为指针数组分配内存,然后在循环中为每套方案分配一个整型数组,存储A到E类型的卷子数目。接着,博主演示了如何读取用户输入的卷子数目并展示出来。最后,博主正确地释放了所有分配的内存,避免内存泄漏。这是一个关于C语言内存管理和数组操作的实例。
9377

被折叠的 条评论
为什么被折叠?



