c 语言中可变数组,C语言实现可变数组

本文详细介绍了如何使用C++创建和管理数组,包括动态数组的创建、`array_create`函数,内存释放的`array_free`函数,以及如何通过`array_inflate`函数实现数组的动态扩容。核心展示了数组操作和内存管理的关键点。

#include 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; isize; 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值