马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//鱼C论坛——BaysideLizard写于2023年11月24日
/*更灵活的内存管理方式
·malloc
--申请动态内存空间
·free
--释放动态内存空间
·calloc
--申请并初始化一系列内存空间
·realloc
--重新分配内存空间
*/
int main()
{
int *ptr = NULL;
int num,i;
printf("请输入待录入整数的个数:");
scanf("%d",&num);
ptr = (int *)malloc(num * sizeof(int));
if(ptr == NULL)
{
exit(1);
}
memset(ptr,0,num * sizeof(int));
/*等价于分配内存空间并初始化
ptr = (int *)calloc(8,sizeof(int));
*/
for(i = 0;i < num;i++)
{
printf("请录入第%d个整数:",i+1);
scanf("%d",&ptr[i]);
}
printf("您录入的数字是:");
for(i = 0;i < num;i++)
{
printf("%d ",*(ptr+i));
}
putchar('\n');
free(ptr);
int *ptr1 = NULL;
int *ptr2 = NULL;
//第一次申请的内存空间
ptr1 = (int *)malloc(10 * sizeof(int));
if(ptr1 == NULL)
{
exit(1);
}
for(i = 0;i < 10;i++)
{
ptr1[i] = i;
}
//假设ptr1申请的内存空间不够用了。
//第二次申请内存空间。
ptr2 = (int *)calloc(20,sizeof(int));
if(ptr2 == NULL)
{
exit(1);
}
//将ptr1的数据拷贝到ptr2中。
memcpy(ptr2,ptr1,10 * sizeof(int));
free(ptr1);
//对ptr2申请的内存空间进行操作。
for(i = 10;i < 20;i++)
{
ptr2[i] = i;
}
for(i = 0 ;i < 20;i++)
{
printf("%d ",ptr2[i]);
}
free(ptr2);
putchar('\n');
//以下程序不用malloc,用realloc实现malloc
int numa;
int count = 0;
int *ptra = NULL;//注意:这里必须初始化为NULL
do
{
printf("请输入一个整数(输入-1表示结束):");
scanf("%d",&numa);
count++;
ptra = (int*)realloc(ptra,count * sizeof(int));
//ptra为NULL,此时realloc相当于malloc
if(ptra == NULL)
{
exit(1);
}
ptra[count - 1] = numa;
}while(numa != -1);
printf("输入的整数分别是:");
for(i = 0;i < count;i++)
{
printf("%d ",ptra[i]);
}
putchar('\n');
free(ptra);
return 0;
}
运行结果:
请输入待录入整数的个数:3
请录入第1个整数:1
请录入第2个整数:3
请录入第3个整数:5
您录入的数字是:1 3 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
请输入一个整数(输入-1表示结束):9
请输入一个整数(输入-1表示结束):8
请输入一个整数(输入-1表示结束):7
请输入一个整数(输入-1表示结束):8
请输入一个整数(输入-1表示结束):9
请输入一个整数(输入-1表示结束):0
请输入一个整数(输入-1表示结束):1
请输入一个整数(输入-1表示结束):-1
输入的整数分别是:9 8 7 8 9 0 1 -1
Process returned 0 (0x0) execution time : 8.075 s
Press any key to continue.
在FishC学C的第二十天 |