#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main1()
{
int num;
scanf("%d", &num);
printf("num = %d\n", num);
//calloc()函数会将其分配的内存空间中的元素初始化为0,而malloc()函数不会
int *p = (int *)malloc(sizeof(int)*num);
if (p == NULL)
{
printf("内存分配失败\n");
}
else
{
printf("内存分配成功,首地址为%x\n\n", p);
for (int i = 0; i < num; i++)
{
p[i] = i; //按照数组的方式访问内存
printf("%d\n", p[i]);
}
free(p);
}
system("pause");
}
void main2()
{
int num;
scanf("%d", &num);
printf("num = %d\n", num);
int *p = (int *)calloc(num, sizeof(int));
//第一个参数,元素的个数;第二个参数,单个元素的大小(所占字节数)
//calloc函数分配内存空间之后,自动将其中的所有元素初始化为0, malloc函数不会自动初始化元素
if (p == NULL)
{
printf("分配失败\n");
}
else
{
printf("分配成功,首地址为%p\n", p);
for (int i = 0; i < num; i++)
{
p[i] = i;
printf("%d\n", p[i]);
}
free(p);
}
system("pause");
}
void main()
{
int num, addnum;
scanf("%d", &num);
printf("num = %d\n", num);
int *p = (int *)malloc(sizeof(int)*num);
if (p == NULL)
{
printf("内存分配失败\n");
}
else
{
printf("内存分配成功\n");
for (int i = 0; i < num; i++)
{
p[i] = i;
printf("%d\n", p[i]);
}
printf("请输入要扩展到的数组大小\n");
scanf("%d", &addnum);
int *px = (int *)realloc((void *)p, sizeof(int)*(addnum + num));
//realloc分配内存,如果当前已分配的内存空间后面相邻的内存空间满足需要的内存空间,则直接进行分配
//否则,将已分配的内存空间的数据复制过来,然后分配一整块内存空间,存储原来的数据,释放掉原来已分配的内存空间
for (int i = num; i < num + addnum; i++)
{
px[i] = i;
printf("%d\n", px[i]);
}
free(px);
}
system("pause");
}
动态内存分配练习
最新推荐文章于 2021-11-22 23:05:08 发布