1、单链表的构造
这里呢,主要是简单的实现一下单链表的基本操作方法,创建与遍历,其目的是想和函数指针一起使用,看看会有什么不同的地方!我们简单的看一下单链表节点的定义吧!
typedef int DataType; //数据类型
typedef struct Node
{
DataType data; //数据域
struct Node *next; //指针域
}Node;
typedef struct Node *LinkList; //结构体指针
2、函数指针的构造
函数指针的构造,你需要弄懂什么是函数指针,什么又是指针函数呢?这里我怕你搞不懂,咱们先来瞅一瞅,看看你能否弄清楚呢?
这里呢,有函数指针,指针函数,以及函数指针数组是如何定义的,以及一个例子,相信机智的应该能看懂少许的吧!那么,在我们这个用例中,我们只用到了函数指针这个概念,我们只需要为我们的APP赋予两个操作函数,然后我们对着APP实例就可调用相应的操作函数啦!
void CreateNode(LinkList *L, int num);
void DisplayNode(LinkList L);
3、APP测试用例
首先我先来规划一下APP的结构体,首先我们为这个APP起个名字,叫做XXX,然后呢,我们为这个APP添加一些操作函数的函数指针,在实例化的时候,就会对应到相应的函数名称啦!后面直接就用咱们实例化的APP就可以操作自己对应的方法啦!废话不多说,咱们先看看APP的结构体长什么样子呢?
struct App
{
char *name; //应用名称
void (*List_Create)(LinkList *L, int num);
void (*List_Display)(LinkList L);
};
typedef struct App *App_Ptr;
接下来就开始完成我们的测试函数啦!至于单链表的构造与遍历在之前的文章有讲过哦,不懂的小伙伴可以翻翻前面的文章哦(单链表的基本操作) ,好啦,我们一起看看咱们的测试函数怎么写吧!
int main()
{
App_Ptr list_app = malloc(sizeof(struct App));
int num = 10;
LinkList me;
list_app->name = "list";
list_app->List_Create = CreateNode;
list_app->List_Display = DisplayNode;
list_app->List_Create(&me, num);
list_app->List_Display(me);
return 0;
}
测试函数长这个样子,很简单的哦,感兴趣的小伙伴可以自行扩展哈!比如将单链表的插入、删除、更新、销毁等操作全部封装到APP里面,这样是不是就有点像面向对象编程的意思呢?哈哈!想让c也有对象,那可是要自己努力的啊!(做一个不恰当的比喻哈!像JAVA、C++、C#这些语言,都是有对象的哇,人家那是出身富贵家庭,所以人家那叫高富帅,自然不缺对象喽;然而咱们C呢,出身于农村家庭,但是你也想找对象,那么你只能自己努力,才能迎娶白富美哈!哈哈哈!菜哥开始乱讲话啦!)
4、makefile的编写
Makefile的编写就不多说了哈!都基本上是最基础的哈!直接给你们上代码喽!
BASEDIR = $(PWD)
SRCDIR = $(BASEDIR)/../function_point
BUILDDir = $(BASEDIR)/../Build
BINDIR = $(BASEDIR)/../bin
CFLAGS = -c -Wall -g
CC = gcc
OBJS = $(BUILDDir)/point.o
$(BINDIR)/point_test:$(OBJS)
$(CC) $^ -o $@
$(BUILDDir)/%.o:$(SRCDIR)/%.c
$(CC) $^ $(CFLAGS) -o $@
clean:
$(RM) $(BUILDDir)/*.o $(BINDIR)/point_test -r
run:
$(BINDIR)/point_test
5、总结
最近菜哥也开始建立自己的gitHub仓库啦!会将文章中所讲的用例的源码全部放到github中,希望小伙伴们多多点赞,多多fork哈!加油,一个又菜又爱玩的博主!附上我github的链接哈!(菜哥的GitHub)