#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
const BLOCK_SIZE=20;//一次增长20个
typedef struct{
int *array;
int size;
}Array;//先定义array,定义一个结构,有两个成员。:一个成员是int数组,其实是指针
void f()//void表示返回空值,f是函数名
{
Array a;//是个本地变量
}
/*
typedef(struct{
int *array;
int size;
}* )Array; 括号里的是Array,而这个东西是指针
Array a;//a是指针,下面的*可以去掉
*/
Array array_creat(int init_size);
Array array_free(Array *a);
int array_size(const Array *a);
int* array_at(Array *a,int index);
void array_inflate(Array *a,int more_size);
/*为什么用Array而不是Array*
② 这种方式,让它返回一个结构体,使我们在外面可以比较灵活方式使用,array_creat制造的Array a
*/
Array array_creat(int init_size){//Array 说明了返回类型 ,返回Array的是本地变量本身
Array a; //①使用Array*会使array a无效
a.array=(int*)malloc(sizeof(int)*init_size);
a.size=init_size;
return a;
}
Array array_free(Array *a){
free(a->array);
a->array=NULL;
a->size=0;
}
//封装
int array_size(const Array *a){
return a->size;//:把a的size保护起来
}
int* array_at(Array *a,int index){//返回类型是指针 //具有自动增长的功能
if(index>=a->size){
array_index(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);//算出位于哪个BLOCK里面,+1,找到序号
}
return &(a->array[index]);//为什么返回指针,而不是int
}
/*
int array_get(const Array*a,int index)
{
return a->array[index];
}
int array_set(Array*a,int index,int value)
{
a->array[index]=value;
}
*///下面改成get和set
void array_inflate(Array *a,int more_size)//作用:长大
{
int *p=(int*)malloc(sizeof(int)(a->size)+more_size));
int i;
//老的空间里面的东西复制到新的空间里面
for(i=0;i<a->size;i++){
p[i]=a->array[i];
}
//代替for循环推荐使用:
//memcpy((void*)p,(void*)a->array,a->size*sizeof(int));
free(a->array);
a->array=p;
a->size+=more_size;
}
int main(int argc,char const *argv[])
{
Array a=array_creat(100);//a是存在于main本地的,所有的变量/成员是从array_creat里面返回出来的a里面的所有成员
printf("%d\n",array_size(&a));
printf("%d\n",a.size);
*array_at(&a,0) =10;//函数调用返回的是一个指针,加*,指针所指的那个东西,是个变量
printf("%d\n",*array_at(&a,0));
int numer;
int cnt=0;//计数器
while(numer!=-1){
//1 scanf("%d",&numer);
//2 *array_at(&a,cnt++)=numer;
scanf("%d",array_at(&a,cnt++));//array_at(&a,cnt++)指针
//1+2于之有同样的效果
if(numer!=-1)
*array_at(&a,cnt++)=numer;
}
array_free(&a);
return 0;
}
可变数组(创建,回收,计算可用空间,访问,数组空间扩大)
最新推荐文章于 2024-06-21 17:14:10 发布