Archive for February, 2011

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,249 views
2011/02/12

现在家庭用的一般是中国电信或者中国移动等运营商的宽带业务,一般采用PPP协议,所以我们上网的时候都要先点“宽带链接”,只要填上用户名和密码,链接成功了就可以上网了。这是在Windows下的PPPoE拨号方式,微软把这个功能做的如此简单,不得不赞一个~ 而到了Linux下,事情就没有这么简单了, 以我使用的Fedora Linux为例,除了填写用户名和密码,其关键之处是必须填写DNS地址!当然,不同地方的运营商设置可能不一样,但是以我的经历,分别在江苏和安徽两地的中国移动宽带上试过,都有这个问题。下面简单介绍一下设置方法,虽然Fedora有NetworkManager,但我一直都很讨厌这个工具,也没有试过,何况是在Linux下还是尽量多用命令行吧。 首先我们需要知道你所使用的ISP服务商的DNS号,如何得到呢?你可以打电话问,也可以找一台可以成功拨号上网的安装了Windows系统的电脑,在开始-运行-cmd进入命令行模式,打入ipconfig /all 这样就可以查看DNS地址了,把它记下来,一般有两个。 之后进入Fedora Linux的Terminal(命令行终端),用root权限输入:pppoe-setup,接着你就看到了如下图的界面,有很多选项需要你填,但是你只需要填上用户名和密码就行了,其他的全部写提示语里面的“默认”内容就行了,在这个过程中它也会让你填写DNS,可以先跳过,因为我们要填2个,而这里只能填一个。 等全部填完了会有一个你填写信息的“摘要”出现,然后输入“yes”,就会出现下图的一些内容。 这时,只差最后一步就完成了,我们再输入命令(同样需要root权限):vim /etc/resolv.conf ,然后把nameserver后面填上你自己的2个DNS地址,然后保存退出。 这时就大功告成了,再在命令行下输入(root权限):pppoe-connnect,就可以成功拨号了。

Tags: ,. 12,464 views