第七章 函数(2)

来源:互联网 发布:apache ftpclient 编辑:程序博客网 时间:2024/05/22 01:43

将结构作为函数的参数就比数组简单多了,基本就跟其他数据类型差不多了,在这种情况下,函数也是是由原始结构的复本。


有的时候结构本身比较大,这个时候将结构的地址(&struct)而不是结构本身传递给函数,这个时候函数头或者函数原型就要把形参声明为指针类型struct *struct,如果不想改变结构,还得前面加上const,这样形参就是const struct *struct


也可以将string作为参数传递给函数,这个时候函数的形参就是一个string类。这个也很简单,跟传其他数据类型一样。


同理,array也是一个类,也可以作为参数传递给函数,用法跟普通变量一样,用户可以选择直接传递array对象或者传递他的地址


了解了函数之后就可以运用递归了,就是一个函数调用自己。如果递归函数调用自己,则被调用的函数也就调用自己,这将无限循环下去,通常做法是将递归函数调用放在if语句中,来设置终止递归的条件. 

递归理解起来不难,看书中的两个例子就能明白。有了递归之后就可以是实现很多算法,如著名的移动塔罗牌。怎么设计这个递归函数就是一门很大学问了。


最后我们来看看函数指针。与数据相似,函数也有地址。可以编写将另一函数地址作为参数的函数,这样第一个函数将能够找到第二个函数,并运用它。具体有什么好处,现在还体会不出来。。。先知道有这么一个东西存在吧

首先讲获取函数的地址:只要使用函数名即可,注意不要跟着参数。

例如一个函数fun(),fun就是函数的地址,

然后怎么声明函数指针来,举个例子

double pam(int); //一个传递int参数返回double的函数

那它的指针要这样声明和赋值

double (*pf) (int);

*pf = pam;

注意一点要把*pf括起来,要不就是声明了一个返回double*的新函数pf。

声明了指针函数之后就可以使用指针来调用函数,接着上例:

double x = pam(4);

double y = (*pf) (5);


如果要把上例中的函数指针作为另一个函数的参数,函数原型应该这样写

void estimate(int lines, double (*pf) (int));

调用的时候就是estimate(line_input, pam);


本章剩下一点稍微深入探讨了函数指针,但也没怎么看出来函数指针的作用,这里就不多说了

0 0