2014.9.30

来源:互联网 发布:图片切片软件 编辑:程序博客网 时间:2024/04/29 14:20

国庆前的最后一天,终于感觉开始正常工作了,时间过的好快,可能我这种没有计划做事习惯的人总是会被这样那样的接口把原定的事情打乱。

所以,希望接下来的一个月,可以把这个项目完成的漂漂亮亮的,所以现在要做的就是,在十一国庆长假里,先把前段时间花的钱剩下来,再就是把代码彻底搞懂,并自己尝试写一些代码。

好了,开始今天的工作总结:

1、关于指针函数与函数指针

这个问题纠结了很久,学了一次动了一次,可却又忘了一次。

指针函数:重点在于它是一个函数,返回的是指针。一般形式如:

类型标识符    *函数名(参数表)

      int *f(xy);

首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

辨别的关键在于,看定义是*号是否被括号包括在内,若不包括在内,则为指针函数

函数指针:是指向函数的指针变量,即本质是一个指针变量

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* func函数的首地址赋给指针f */

此时,f是一个指针变量,故将函数名func即函数的地址赋值给指针变量f

这个指针指向一个返回整型值的函数


指针函数最终是个函数,其变量是函数,并且返回的是一个指针

函数指针最终是个指针,其变量是指针,并且是指向函数的指针,*fun则表示函数调用



在指针函数中,有这样一类函数,它们也返回指针,但是这个指针不是指向intchar之类的基本类型,而是指向函数。对于初学者,别说写出这样的函数声明,就是看到这样的写法也是一头雾水。比如,下面的语句:

         int (*ff(int))(int *, int);

我们用上面介绍的方法分析一下,ff首先与后面的()结合,即:

         int (*(ff(int)))(int *, int);                   // 用括号将ff(int)再括起来

也就意味着ff是一个函数。

    接着与前面的*结合,说明ff函数的返回值是一个指针。然后再与后面的()结合,也就是说,该指针指向的是一个函数。

这种写法确实让人非常难懂,以至于一些初学者产生误解,认为写出别人看不懂的代码才能显示自己水平高。而事实上恰好相反,能否写出通俗易懂的代码是衡量程序员是否优秀的标准。一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:

         int (*PF)(int *, int);

也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:

         typedef int (*PF)(int *, int);

这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:

         PF ff(int);


0 0
原创粉丝点击