用链表做了就不是数组了。
我首先想到的是C++中的vector,以前见过有人用C写面向对象风格的代码,记得不是很清楚,根据自己的理解我写了下面的一种实现方法:
[CODE]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//=============================Starting to define my Array class=========================
//-----------------------------Declaration segment-------------------------
typedef int DataType;
typedef struct array{
DataType *Data;
int size,max_size;
void (*Input)(DataType , struct array *);
void (*Constructor)(struct array *);
void (*Destructor)(struct array *);
}Array;
void Init(Array *this);
void _constructor(Array *this);
void _denstructor(Array *this);
void _input(DataType data, Array *this);
//------------------------------Implemen segment---------------------------
void _input(DataType data, Array *this)
{
int i;
DataType *ptr;
if(this->size >= this->max_size)
{
this->max_size +=10;
ptr=(DataType *)malloc(this->max_size*sizeof(DataType));
for(i=0;i<this->size;i++)
ptr[i]=this->Data[i];
free(this->Data);
this->Data=ptr;
}
this->Data[this->size]=data;
++(this->size);
}
void _constructor(Array *this)
{
this->size=0;
this->max_size=10;
this->Data=(DataType *)malloc(this->max_size*sizeof(DataType));
}
void _denstructor(Array *this)
{
free(this->Data);
}
void Init(Array *this)
{
this->Input =_input;
this->Constructor =_constructor;
this->Destructor =_denstructor;
this->Constructor(this);
}
//===================================definition end===============================
// 使用示例
int main()
{
Array MyArray;
Init(&MyArray); //使用对象前必须初始化,间接调用构造函数
MyArray.Input(1,&MyArray);
MyArray.Input(2,&MyArray);
printf("The elements of MyArray : %d,\t%d",MyArray.Data[0],MyArray.Data[1]);
getch();
MyArray.Destructor(&MyArray); //使用对象后必须显式调用析构函数
return 0;
}
[/CODE]
可惜C不支持template,不能做成模板;函数不能隐式传递this指针,不得不显示加入this;不支持运算符重载,不能使用[]直接访问元素;否则可以写出更加优雅的代码。
如果大家可以用C写出更加OO的code欢迎跟贴讨论。