C语言动态数组实现,含代码

这本来是非常基础的东西,其实它就是一个指针而已,搞得好像很神秘似的。
但如果能写一套接口去维护这个指针,就会显得动态数组有点学习的价值,今天有一哥们自学C语言,听课听到动态
数组,跟我交流了一下作业, 于是产生了如下代码,供有兴趣的同学们查阅。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum
{
    true,
    false
}BOOL;
typedef struct
{
     int *pArray;
     int size;
}ARRAY;

BOOL array_ctor(ARRAY *p, int size)
{
     if (!p)
          return false;
      p->pArray = (int *)malloc(size);
      if (p->pArray) {
            p->size = size;
            return true;
      } else {
          return false;
      }
}
 
BOOL array_dtor(ARRAY *p)
{
      if (!p)
          return false;
      free(p->pArray);
           p->pArray = NULL;
      return true;
}
 
int array_size(ARRAY const *p)
{
      if (!p)
           return (int)false;
      return p->size;
}
 
int * array_at(ARRAY const *p, int index)
{
     if (!p)
          return NULL;
     return &p->pArray[index];
}
 
BOOL array_inflate(ARRAY *p, int size)
{
     if (!p)
          return false;
     p->pArray = (int *)realloc(p->pArray, p->size + size);
     if (p->pArray) {
          p->size += size;
          return true;
     } else {
          return false;
     }
}

int main(int argc, char *argv[])
{
      int i = 0;
      ARRAY test;
      int *p = NULL;
      /*测试array_ctor函数*/
      array_ctor(&test, sizeof(int) * 10);
      printf("array_ctor之后数组地址为0x%p\n", test.pArray);
      for (i = 0; i < 10; i++)
            test.pArray[i] = i + 1;
      for (i = 0; i < 10; i++)
            printf("%d ", test.pArray[i]);
      printf("\n");
      /*测试array_size函数*/
      printf("数组占内存空间的大小为%d\n", array_size(&test));
      /*测试array_at函数*/
      p = array_at(&test, 5);
      printf("数组中索引为5的元素值为%d\n", *p);
      /*
      以上两句话等价于下面这一句话
      printf("数组中索引为5的元素值为%d\n", array_at(&test, 5)[0]); 或者
      printf("数组中索引为5的元素值为%d\n", *array_at(&test, 5));
      */

      /*测试array_inflate函数*/
      array_inflate(&test, sizeof(int) * 5);
      printf("array_inflate之后数组地址为0x%p\n", test.pArray);
      for (i = 10; i < 15; i++)/*注意i的初始值*/
            test.pArray[i] = i + 1;
      for (i = 0; i < 15; i++)
           printf("%d ", test.pArray[i]);
      printf("\ninflate之后数组占内存空间的大小为%d\n", array_size(&test));
      /*测试array_dtor函数*/
      array_dtor(&test);
      if (test.pArray == NULL)
            printf("free success\n");
      else 
            printf("free failed\n");
      return 0;
}

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据