基础知识:c语言和指针

基础知识:c语言和指针

ID:8824593

大小:43.50 KB

页数:5页

时间:2018-04-08

基础知识:c语言和指针_第1页
基础知识:c语言和指针_第2页
基础知识:c语言和指针_第3页
基础知识:c语言和指针_第4页
基础知识:c语言和指针_第5页
资源描述:

《基础知识:c语言和指针》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、指针是C的灵魂,正是指针使得C存在了这么多年,而且将长期存在下去。事实上,我自己不用C语言写程序已经有一年了,工作中接触到的只有java,python和javascript.最近用C完成了一下类似于OO中的封装(即"类")的概念,顺便把指针复习了下,感觉有必要记一下。   本文中的例子有这样两个概念:任务(Task),执行器(Executor)。任务有名称(taskName),并且可以执行(execute)。而执行器与具体任务所执行的内容无关,只是回调(callback)任务的执行方法,这样我们的执行器就可以做的比较通用。而任务接口只需要实现一个execute

2、方法即可,这样我们的任务就可以是多种多样的,可以通过统一的接口set给执行器执行。这是面向对象中基本的思想,也是比较常用的抽象方式。下面我们具体看下例子。   可以想象,main函数大概是这个样子: int main(int argc, char** argv) {    Task *t1 = TaskConstruction("Task1", run);//此处的run是一个函数指针    Executor *exe = ExecutorConstruction();    exe->setTask(t1);    exe->begin();    exe-

3、>cancel();    Task *t2 = TaskConstruction("Task2", run2);//此处的run2也是一个函数指针,用于构造一个Task.    exe->setTask(t2);    exe->begin();    exe->cancel();        return (EXIT_SUCCESS);}   运行结果为: task : [Task1] is ready to run[a = 1.200000, b = 2.300000][(a + b) * (a - b) = -3.850000]cancel is i

4、nvoked heretask : [Task2] is ready to runanother type of execute,just print out some informationcancel is invoked here  好了,下面详细看看实现:    定义接口   首先,定义Task和Executor两个实体的接口:   Task接口,注意其中的_this字段,这个指针在后边有很重要的作用,用于hold整个Task的实例。然后是一个taskName的字符串,和一个函数指针,这个指针在初始化(构造)Task时传入。这个execute()函数比

5、较有意思,它不在内部使用,而是让执行器回调执行的。 #ifndef _ITASK_H#define    _ITASK_Htypedef struct Task{    struct Task *_this;    char *taskName;    void (*execute)();}Task;void execute();#endif    /* _ITASK_H */   执行器接口比Task接口复杂一些,其中包含_this指针,包含一个对Task的引用,然后是对外的接口begin(),cancel()。对接口的使用者来说,他们只需要调用接口实例上的

6、setTask(),将任务传递给执行器,然后在适当时期调用begin(),等待任务正常结束或者调用cancel()将其取消掉。 #include "ITask.h"#ifndef _IEXECUTOR_H#define    _IEXECUTOR_Htypedef struct Executor{    struct Executor *_this;    Task *task;    char *(*setTask)(Task* task);    void (*begin)();    void (*cancel)();}Executor;char *se

7、tTask(Task *task);void begin();void cancel();#endif /*_IEXECUTOR_H*/    实现接口 #include #include "ITask.h"Task *task = NULL;void execute();/* * The construction of Task object. * name : the name of the task * execute : execute method of the task *  */Task *TaskConstruction(c

8、har *name, void (*e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。