#include <stdio.h>
#include <stdlib.h>
const int BLOCK_SIZE = 20;
//创建结构体
typedef struct {
int *array;
int size;
} Array;
//函数声明
Array array_create(int init_size);
void 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_create(int init_size){
Array a;
a.size = init_size;
a.array = (int*)malloc(sizeof(int)*a.size);
return a;
}
//释放内存
void array_free(Array *a){
free(a->array);
a->array = NULL;
a->size = 0;
}
//封装,获取数组大小
int array_size(const Array *a){//*a 声明a是一个指针变量,传入参数的时候要用&传入地址
return a->size;
}
//查询数组下标对应值
int* array_at(Array *a,int index){
if (index >= a->size){
array_inflate(a, (index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);
}//如果下标超出数组长度,则把数组增大一个BLOCK
return &(a->array[index]);
}
/*
int array_get(const Array *a,int index){
return a->array[index];
}
void array_set(Array *a, int index, int value){
a->array[index] = value;
}
*/
//增长数组
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];
}
free(a->array);
a->array = p;
a->size += more_size;
}
int main(int argc, char const *argv[] )
{
Array a = array_create(10);
printf("数组长度为:%d\n",array_size(&a));
*array_at(&a,0) = 5;//写入值到数组
*array_at(&a,1) = 6;//写入值到数组
*array_at(&a,2) = 7;//写入值到数组
printf("第一位值为:%d\n",*array_at(&a,0));
printf("第二位值为:%d\n",*array_at(&a,1));
printf("第三位值为:%d\n",*array_at(&a,2));
// int number = 0;
// int cnt = 0;
// while (number !=-1){
// scanf("%d", &number);
// if (number != -1){
// *array_at(&a,cnt++) = number;
// }
// }
array_free(&a);
return 0;
}
C语言实现可变数组
猜你喜欢
转载自blog.csdn.net/qq_41580631/article/details/87621502
今日推荐
周排行