以下是頭文件的代碼,想問下用“typedef void SeqList”這樣寫是啥意思呢?把“SeqLis”重命名為空類型?網上看了下是說什麼封裝,就是在 .c 文件下不能隨意給SeqList定義的結構體裡面 的對象進行賦值。求大神賜教!
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
typedef void SeqList;
typedef void SeqListNode;
SeqList* SeqList_Create(int capacity);
void SeqList_Destroy(SeqList* list);
void SeqList_Clear(SeqList* list);
int SeqList_Length(SeqList* list);
int SeqList_Capacity(SeqList* list);
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);
SeqListNode* SeqList_Get(SeqList* list, int pos);
SeqListNode* SeqList_Delete(SeqList* list, int pos);
#endif
以下是.c文件的一部分代碼。如果加上一句list ->length=0,程序則會報錯,報錯原因就是說在頭文件裡面用void對SeqListNode進行了封裝。這是什麼意思呢?
int main(int argc, char *argv[])
{
SeqList* list = SeqList_Create(5);
int i = 0;
int j = 1;
int k = 2;
int x = 3;
int y = 4;
int z = 5;
int index = 0;
typedef void SeqList; 給void起別名為 SeqList
typedef void SeqListNode;
這樣做是為了使用者方便閱讀,
SeqList* SeqList_Create(int capacity); //這樣一看返回值就知道是返回值是鏈表
void * SeqList_Create(int capacity); //如果這樣,使用者一看只知道是返回指針,不知道具體的,可讀性很差
所以才會給void起別名,封裝好的底層函數,提供給使用者使用,使用者會給容易懂