堆区 (程序员空间):空间由用户申请,由用户来释放空间。
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");
}
}
}