指针数组的应用(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;
}