参考课程:翁恺C语言程序设计
#include<stdio.h>
#include<conio.h>
//声明一个结构体:
typedef struct {
int *array;
int size;
}Array;
//创建一个数组 :
Array array_create(int init_size){
Array a;
a.array= (int*)malloc(sizeof(int) * init_size);
a.size = init_size;
return a;
}
//用于释放旧内存:
void array_free( Array* a)
{
free(a -> array);
a->array = NULL;
a->size = 0;
}
//数组大小(可不要)
int array_size(const Array *a){
return a->size;
}
//扩大数组大小
void array_inflate(Array* a,int more){
int *p=(int*)malloc(sizeof(int)*(a->size+more));
int i;
for(i=0;i<a->size;i++){
p[i]=a->array[i];
}
free(a->array);
a->array=p;
a->size+=more;
}
//输入数字
int* array_at( Array* a,int index){
while(index>=a->size){//当内存到了最大时进入inflate函数扩大内存(数组大小)
array_inflate(a,index-a->size+1);
}
return &(a->array[index]);
}//本函数返回的是一个指针所以要用取地址符
int main()
{
int i=10;
Array a=array_create(i);
int cnt=0;
while(1){
scanf("%d",array_at(&a,cnt));
printf("%d\n",*array_at(&a,cnt));
cnt++;
printf("size=%d\n",a.size);
}
array_free(&a);
}
总结:可变函数需要用到命令很多每一步都环环相扣,目前对我来说思路和每一步都看得明白,但是如果丢去自己写的话难免会出现遗漏,还需多复习。应用范围也很广,可以拿来做模板直接使用