0723数组复习 堆区 动态数组

 

 

堆区 (程序员空间):空间由用户申请,由用户来释放空间。
     API: 申请  malloc(size_t bytes)    释放:free      
        注:bytes代表字节的数量
        注:malloc/realloc返回值为NULL,申请失败
        注:头文件为 stdlib.h

使用步骤:
        1、申请 p=malloc(size_t)
        2、使用 
        3、释放    free(p);
        3.1.1变量空间

例题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Array
{
	int* data;//记录堆区
	unsigned short len;//容量大小
	short index; //实际大小
};

void main()
{
	int opt=0;
	struct Array a={NULL,0,-1};

	while(1)
	{
		printf("please input[1/2/3/0]:");
		scanf("%d",&opt);
		switch(opt)
		{  
			case 0://释放
			{
				printf("欢迎再次使用:\n");
				if(a.len>0)//长度>0;
				{
					free(a.data);
					a.data=NULL;
					a.len=0;
					a.index=-1;
				}
				return;//结束函数
			}
			break;
			case 1://插入成绩:当容量不满足才申请空间
			{
				int score;
				printf("输入成绩:");
				scanf("%d",&score);

				//判断是否为满
				if(a.index+1==a.len)//为满
				{
					printf("为满\n");
				//申请新的空间
				int* pnew=(int*)malloc((a.len+5)*sizeof(int));
					if(NULL!=pnew)
					{
						//将老空间赋值给新空间
				memcpy(pnew,a.data,a.len*sizeof(int));	
						a.len=a.len+5;//修改长度
						//释放
						free(a.data);
						//重新指向
						a.data=pnew;
					}	
				}
				//插入数据
				a.data[++a.index]=score;
			}
			break;
			case 2://查找成绩
			{
				int score;
				printf("请输入查找成绩:");
				scanf("%d",&score);
				int z=0;
				while(a.index>=0)
				{
					if(a.data[a.index]==score)
					{
					z=1;
					printf("存在%d\n",score);
					break;
					}
					a.index--;
				}
				if(z==0)
				{
					printf("不存在\n");
				}
			}
			break;
			case 3:
			{
				int i=0;
				while(i<=a.index)
				{
				printf("%d ",a.data[i]);
					i++;
				}
				
			}
			break;
			default:
				printf("输入有误\n");
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值