从今天开始本菜鸟将就编程里我遇到的一些有意思的东西写点点看法~
取名叫“大话C、C++” 系列吧
早就想自己总结一下关于C、C++里一点关于void的思考了。发现几个非常有意思的地方。
void在C、C++里的意思是“空”。最常用的是,当一个函数不需要返回值的时候,就给它的返回值定义成void。或者一个函数不需要输入参数的时候,也将其定义为void。
“空”,无论是在自然界还是在我们的哲学界都是一个很宽泛的概念。
记得小学的时候,自然数是不包括零的。而不知道从什么时候开始,(貌似是初中),老师又说我们的自然数应该是包括零——因为“无”的概念在自然界中也是天然存在的。可见学术界就关于“空”和 “无”的概念也是模拟两可,争论不断的。
读书前的我们,最自然、感性的理解,“无”就是没有,那么我们就不要去管。
而当我们到小学或者初中的时候,老师反复强调,在理性的范畴内,零这个东西是由意义的。是一个值,一个有意义的载体,而不是一个空洞的不需要理会的东东。
那么在编程里面,我们可以看到
void f( void ) 函数可以简单的写成 f()
又是一个可以“忽略”的东西。
所以,即使在理性的范畴,空 和 无的概念,需要具体按情况来定。
然后我们再看看感性的认识:
佛门经典语句,“色即是空”。
哈哈,用的思想来理解这个是彻底的唯心主义了 —— 世间万物形形色色,而在心中这一切对老子心中就如同没有一样。
好了,这个问题交给哲学家。下面来讨论一下C、C++中最有艺术的一个东西 —— void* (一个指向没有的指针)。
老实的说,我在读书时几乎不能理解这个东西。
一个东西既然没有,那么弄一个指针指向它是什么意思?
定义一个void*,就像我对你说:“沿着这条路走吧,这条路将通往虚无”。——你能理解么?
其实不然,当你实际编程中用到void*的时候,就会发现,这是一个偷龙转凤的概念。下面我将“翻译”几个C、C++中的定义。
1.如果可以的话void*可以被转换成任意类型!(如果条件满足的话,无可以衍生出任意东西!)
2.任意类型可以转化为void*(任何东西都可以转化为没有。)
我靠…… 把这两句话综合起来,不就是佛门经典语句“色即是空”“空即是色”了么?
可见C语言的作者,就哲学这块一定有很深的造诣,说不定还是佛教弟子呢。哈哈(just a joke)
******************以下内容非专业人员慎重进入 ^_^**********************
那么编程中void*怎么用呢?举个实用的例子说说吧。
以下对问题进行通俗版和专业版分类,适合于不同读者。 ^_^
先看看问题:
小A对小B说:“我这有三个碗,你给我分别装100粒绿豆、黄豆、黑豆。装完之后叫小C通知我”(A程序启动多个线程,均会调用B函数,同时将C函数注册为回调函数作为参数传入B)
然后小B就一粒一粒的给数啊数啊,直到数满了100粒某种豆子。小B就和小C说:“喂,我数满啦!”(B处理完数据后调用回调函数C,)
小C对小A说:“小B他数满了豆子了!”—— 于是小A很疑惑,他数满什么豆子了?我该放哪个碗里呢?(C函数对数据进行处理,但是此时无法知道当时是哪个线程调用的B函数。)
处理方法一:(非专业人员及在校学生常用)
小A每次对小B说的时候,给一个代号,比如1是装绿豆,2是装黄豆,3是装黑豆。(传入index值)
小B数完后告诉小C,装满啦!代号是XXX,所以你该放到哪个碗里。(index传入回调函数)
小C把豆子放到碗里。(回调函数最终处理)
注:index就是碗的编号啦。(这里程序员一般把静态数组的下标作为index。)
处理方法二:(比较厉害的学生及半专业人员常用)
小A每次不光对小B说装入豆子,还需要把碗给小B。(传入需要处理的地址。)
小B装完后把碗和豆子都给小C。(地址作为参数传给回调函数。)
小C把豆子放到碗里。(回调函数处理最终结果。)
处理方法三:(专业人士用法)
这个不提供通俗版了……不知道怎么写。
多线程调用B函数时传入一个void*值,可以是index,可以地址,可以是线程句柄指针,甚至可以是其他函数。
B函数完成处理后调用回调函数,将void*作为输入参数传入回调。
回调函数解该void*,再进行处理。
所以void*可以在参数类型不确定,或者可以灵活变动时使用,适当的使用void*,将为你的客户程序员提供极大的便利!
******************************************************************
说得我自己都有点头大了……
总而言之,void和void*蕴含了丰富哲理啊~我觉得这是C和C++的艺术。
谁有兴趣的话可以总结总结void**和void*** ……或者void**************
哈哈。可以作为一个哲学课题了。
分享到:
相关推荐
《大话设计模式》C++实现-design-patterns-cpp
读书笔记:大话设计模式C++
这个名为“大话西游2与梦幻西游的地图提取器(包含遮挡图)”的项目,是使用C++编程语言编写的控制台应用程序,专用于从这两款知名网络游戏——大话西游2和梦幻西游中提取地图资源。下面将详细介绍这个项目所涉及的...
大话设计模式C++实现
《大话模式》是一本经典的面向对象设计模式的书籍,其中介绍了多种设计模式,包括Strategy模式。Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。在这个模式中,一个类的行为或其算法可以在运行时...
读书笔记:大话设计模式C++实现
总结来说,"大话西游经典系列"是一个使用C++编程语言,通过Visual C++开发的综合性系统类程序,可能包含与电影《大话西游》相关的娱乐内容。程序的运行和体验依赖于VC++的特性和开发者的编程技能,而"West"这个文件...
在C++中,策略模式主要用于封装一系列算法,并让它们之间可以互相替换,使得算法的变化独立于使用算法的客户。这种模式通常涉及三个主要角色:策略接口、具体策略类以及上下文。 策略接口定义了一族相关或相互排斥...
开发语言:Visual C++ 8 针对游戏:大话西游2.0.78版本 软件功能:此版本的lua4脚本引擎 注意如果要编译大话西游2.0.78版,需要相应的将src\lopcodes-78.h 改名 lopcodes.h。 版权属于Copyright (C) 1994-2000 ...
读书笔记:大话设计模式(C++实现)
读书笔记:《大话设计模式》C++实现
读书笔记:《大话设计模式》C++代码实现
《算法与数据结构C与C++描述》是针对计算机科学中的核心概念——算法和数据结构进行深入探讨的教材。在编程领域,理解并熟练运用这些概念对于提升代码效率和优化程序设计至关重要。本文将详细阐述其中的关键知识点。...
"大话西游鼠标指针"是一款以经典电影《大话西游》为主题设计的鼠标指针主题包,为用户提供了一种个性化的电脑体验。下面将详细介绍这一主题包的相关知识点。 首先,我们要了解鼠标指针主题。在Windows操作系统中,...
程杰版的《大话设计模式》的C++版本代码
《大话3WDF解包器:深入解析与应用》 在计算机游戏中,资源的管理与存储是一项重要的技术,尤其对于大型多人在线游戏(MMORPG)如“大话西游”系列来说,如何高效地组织和加载游戏资源是至关重要的。本文将详细探讨...
《网易梦幻大话系列精灵制作器》是一款专为网易旗下的多款热门游戏——梦幻西游、大话西游2、大话西游3以及大话外传设计的辅助工具。这款制作器允许玩家查看和创建游戏中的“精灵”,即游戏内的角色、宠物和其他视觉...
《大话西游2》是一款深受玩家喜爱的网络游戏,其背后有着复杂的系统和丰富的资源管理。在这款游戏中,素材的管理是至关重要的,这直接影响到游戏的视觉效果、音效体验以及整体的游戏性能。"大话素材目录.zip" 是一个...
读书笔记:程杰版的《大话设计模式》的C++版本代码
设计模式之《大话设计模式》.pptx