C语言中动态数组的处理涉及到很多内存管理的知识,不断学习中终于明白了动态数组是怎样去实现的,源码如下:
#include <stdio.h>
#include <stdlib.h>
struct dynamicArray{
void ** pAddr;//维护指向该动态数组的指针
int m_capacity;//动态数组的容量
int m_size;//元素个数
};
struct dynamicArray* init_dynamicArray(int capacity){
if(capacity <= 0)
return NULL;
//给整个数组在堆上开辟空间
struct dynamicArray* Array = malloc(sizeof(struct dynamicArray));
if(Array == NULL)
return NULL;
//对动态数组进行初始化
Array->m_capacity = capacity;
Array->m_size = 0;
Array->pAddr = malloc(sizeof(void *)*capacity);
//最终返回该动态数组
return Array;
}
//实例
int main(){
//由于已经封装好,这里不需要对内存进行管理
struct dynamicArray *Array = init_dynamicArray(5);
//尝试输出数组的容量和元素个数
printf("数组的元素个数是%d\n数组的容量是%d\n",Array->m_size,Array->m_capacity);
return 0;
}