Posts Tagged ‘编程’

2011/02/14

函数指针,顾名思义就是指向函数的指针,它与一般的指针有什么不同呢?我觉得,函数指针只是在定义的时候有一点不同,使用的时候,它就是一个指针该怎么用就怎么用。 int (*f)(int,double); 类似于上面的定义式就是函数指针的定义了。 从前往后分析,最前面的int 说明了这个所指向的函数的返回值,显然,这个被指向的函数会返回一个整型的值;(*f)()结构说明了这是一个函数指针,(int,double)说明了这个指针指向的函数的参数形式,即第一个参数是int型,第二个参数是double型,这时,我们脑海里可以想象有一个这样的函数 int function(int a,double b),并且有一个叫 f 的指针指向了这个函数(其实是指向了这个函数段的起始地址)。 有了前面的分析,就不难理解这个定义了 char * (*f)(double,double); 下面再来一个难一点的,int (*g[])(int ,int);首先这肯定是一个指针,但是[]怎么理解呢?按照数组的理解方法,例如int array[9]定义了一个9个元素的数组,每个元素都是int型,以此类推,这是一个函数指针数组,每一个数组元素的类型都是一个函数指针,他们都各自指向一个类似于 int func(int,int)的函数。 如何使用函数指针呢?我们知道,函数名其实就是指向函数代码段的一个指针,因此,f和function都可以看成是一个指针,都指向了内存中同一块代码段,所以,调用f(3,4.5)与function(3,4.5)是一样的,相当于是给原来的函数一个别名吧。当然,f是一个指针,理所当然可以对他进行“间接访问”,即 (*f)(3,4.5)。 一般情况下对于函数指针的常见情况也就是以上这些了,那么函数指针到底有什么用呢? >说实话,我自己写代码到目前为止还没用过函数指针,一方面是我对这个不熟悉,在coding的过程中不能灵活运用;另一方面函数指针可能确实不如其他语法常用,因此,我举一个《C和指针》中类似的例子。 例子一:不用函数指针的实现。 swith(op){ case ‘+’:add(x,y);break; case ‘-‘:sub(x,y);break; case ‘*’:mul(x,y);break; case ‘/’:div(x,y);break; } 上面的代码实现了模拟一个计算器对于x,y做加减乘除,那么用函数指针如何实现呢? 例子二:用函数指针实现。 首先我们需要声明函数,并对函数指针数组初始化。 double add(double,double); double sub(double,double); double mul(double,double); double div(double,double); /*声明函数指针数组*/   double (*op_fun[4])(double,double)={add,sub,mul,div}; 现在我们可以这样使用: result=op_fun[op](x,y); OK,以上就是鄙人学习函数指针的一点点心得。

Tags: ,,. 6,377 views
2009/11/04

好久没有写代码了,也好久没有更新我的博客了,昨晚写了这个过滤文件名的程序,遂发之~ 这个周末班级要出去秋游了,去浙江,让我失望,兴趣不大,其实我想去黄山. 01 /*name:FileNameFilter 02 *author : Runzhen Wang   03 *date:2009/11/04 04 */ 05  06 import java.util.*; 07 import java.io.*; 08 import java.lang.*; 09  10 class FileNameFilter{ 11     public void  filter(String strPath,String fname){ 12         File f=new File(strPath); 13         String s=new String(); 14         if(f.isDirectory()){ 15              File[] fList […]

Tags: ,. 6,880 views
2009/10/11

OK ,国庆假期除了走亲戚就折腾这个玩意了,10月8号来到了学校,这个假期本来还打算骑自行车出去玩啊什么的,现在看是没时间了,7天时间做了这个山寨版的游戏… 对于写这个程序,有 起因(Link) 、经过(Link)、结果。结果就是本文了,其他的请点击链接。 初次尝试Java的GUI编程,也算有一点点的小心得,毕竟与命令行相比,很多时候命令行需要考虑的地方在GUI下并不需要考虑。比如,在输入命令的时候,我要考虑你输入非法的情况,如果让你输入”yes”或”no”,如果你错误输入了”non”,那么程序就处理不了了。而在GUI下则不用考虑这些,因为我只会给你两个按钮“确定”和“取消”,你不会再有其他的按钮点击了,所以,在后台的代码中我就不需要考虑你会输入错的指令了。一点点小感悟。 其次,相比VB、C#里面可以直接拖拽组件来写GUI,这样多爽!而Java里面却只能通过代码来折腾GUI,这要求你对图形相关的API接口要相当的熟悉,这就需要时间和经验的积累了,像我这样的新手,这次被这玩意折腾死了,写界面占用了写整个程序的大部分时间。 关于这个游戏,源代码(下载地址)在此。 至于GUI部分,请您直接跳过,因为写的跟一堆代谢产物一样…. 已知GUI部分的BUG: 1)在游戏难度里面选了一个难度以后,在本次游戏结束前不要再选第二次了,否则后果你自己看吧~~ 2)一次游戏结束后,会跳出得分,点关闭后整个游戏也自动关了,如果还想玩,请再双击图标~ 最后提醒一点:对于生成的可执行文件(same.jar下载),如果你想在你的电脑里双击运行它,那么电脑里要装有Java的JVM,否则可能无法运行。 我自定的算分规则: 点击同时消去1个方块:扣一分 同时消去2个方块:不得分 同时消去2个以上方块:按消去的个数给分。

Tags: ,,. 6,871 views
2009/10/02

这个学期正在学习JAVA ,正好我在用Ubuntu Linux的时候发现里面自带一个简单的游戏Same GNOME,游戏界面如下。 …   我想了想,这个游戏的算法很简单,用数组就能搞定,所以就打算自己写一个山寨版的。 计划拖了N天(我的一贯作风)加上写代码N天,终于把核心的算法搞定了,但是是命令行版的,还需要写界面的代码,写界面虽然不难但是牵涉到很多JAVA API知识,很广很散,另外教材上关于Swing、AWT的部分也太少太少,我正准备找些资料,如果各位有什么好的资料可以推荐给我,万分感谢!由于游戏还是命令行版的半成品,就先不“开源”了,等我写好了再一起公开源代码吧,呵呵 PS:由于家里包网的是寒暑假无限的套餐,所以不是寒暑假的每个月只有10小时的免费时间,所以…我国庆期间上网的时间可能不会太多..(貌似我一直闹网荒,不过去学校后就好了,包了新套餐,一个月有70小时)

Tags: ,. 20,125 views
2009/08/22

D大同学   曰:数组作为参数会退化为指针,这个规则应该牢记。。。

KC  曰:当数组首地址被作为指针传…

Tags: ,,. 6,314 views
2009/08/20

今天猛然间看到 pivot可以这样优化:取开始(beg)、中间(mid)、结束(end)的中间值

用我讨厌的数学公式表达…

Tags: ,,. 3,484 views
2009/08/19

我左看右看上看下看,怎么看都是逆时针的,怎么都看不出她是顺时针在转。看来我是左脑比右脑发达多了。左脑发达善于做技术类、抽象的工作(如电脑编程)。原来冥冥之中命中注定的

Tags: ,. 11,400 views