版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011123091/article/details/82056503
C语言数组目前我知道两种动态数组和环形buffer,先写一个动态数组,等下写个环形bufer。
以下是代码和实验现象
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct damicArray
{
int size;//使用量
int capacity;
int * pArr;
}Dynamic_Array;
Dynamic_Array* Init_Array()
{
//就是分配damicArray的空间和pArr的空间
Dynamic_Array * arr=NULL;
arr=(Dynamic_Array*)malloc(sizeof(Dynamic_Array));
arr->size=0;
arr->capacity=20;//先分配20个空间
arr->pArr=(int *)malloc(sizeof(int)*arr->capacity);
return arr;
}
void PushBack_Array(Dynamic_Array* arr,int value)
{
int* newArr=NULL;
//做参数检测
if(arr==NULL)return;
//做边界检查
if(arr->size==arr->capacity)
{
//创建新空间
newArr=(int*)malloc(sizeof(int)*arr->capacity * 2);
if(newArr==NULL) return;
//复制旧的数据进去
memcpy(newArr,arr->pArr,arr->capacity*sizeof(int));
//释放原来的
free(arr->pArr);//一定要先释放到原来的
arr->pArr=newArr;//不然先复制再释放了。
arr->capacity=arr->capacity * 2;
}
//新的数据填充进去
arr->pArr[arr->size++]=value;
}
void Print_Array(Dynamic_Array* arr)
{
for(int i=0;i<arr->size;i++)
{
printf("%d\n",arr->pArr[i]);
}
}
void FreeSpace_Array(Dynamic_Array* arr)
{
//参数检查
if(arr==NULL)return;
//因为在初始化的时候申请了两块内存所以这里释放
if(arr->pArr!=NULL)
free(arr->pArr);
free(arr);
}
void Clear_Array(Dynamic_Array* arr)
{
arr->size=0;//很巧妙,只用把size设置为0就可以
}
int main()
{
Dynamic_Array* arr=Init_Array();
printf("capacity is %d,size is %d\n",arr->capacity,arr->size);
for(int i=0;i<30;i++)
{
PushBack_Array(arr,i);
}
printf("capacity is %d,size is %d\n",arr->capacity,arr->size);
Print_Array(arr);
FreeSpace_Array(arr);
return 0;
}
实验现象: