动态内存分配练习

#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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值