#include "stdafx.h" #include <stdio.h> #include <malloc.h> struct List_Exten { //定义结构体数组 int *A; int n; int c; // capacity }; void List_Init(List_Exten* List); void List_Append(List_Exten* List, int value); void List_Show(List_Exten* List); void List_Init(List_Exten* List) { //初始化数组 List->c = 1; List->n = 0; List->A = (int*)malloc(sizeof(int)*List->c); //给A分配内存 } void List_Append(List_Exten* List, int value) { //参考Python 中的append()函数 if (List->c == List->n) { //如果容量满了,扩充2倍 List->c = 2 * List->c; int* B = (int*)malloc(sizeof(int)*List->c); //创建一个数组B,将A的数据copy给B,然后丢弃A,将结构体List指向B的首地址 for (int i = 0; i < List->n; ++i) { B[i] = List->A[i]; } printf("extented!\n"); free(List->A); List->A = B; } List->A[List->n++] = value; } void List_Show(List_Exten* List) { for (int i = 0; i < List->n; ++i) { printf("%d\n",List->A[i]); } } int main() { List_Exten *List = (List_Exten*)malloc(sizeof(List_Exten)); //分配内存 List_Init(List); List_Show(List); List_Append(List, 1); List_Show(List); List_Append(List, 2); List_Show(List); List_Append(List, 3); List_Show(List); List_Append(List, 4); List_Show(List); List_Append(List, 5); List_Show(List); List_Append(List, 6); List_Show(List); List_Append(List, 7); List_Show(List); } 文章来源: C语言实现可扩充的数组