函数¶
函数声明:
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体是不是存在,并不重要。
2.函数的声明一般出现在函数的使用之前,要满足先声明后使用。
3.函数的声明一般要放在头文件之中。(后缀为 .h)
函数定义:函数的定义是指函数的具体实现,交代函数的功能实现。
函数与指针¶
函数指针¶
函数指针,其本质是一个指针变量,该指针指向这个函数。
声明形式:type (*func)(参数列表)
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。 既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。
int(*p)(int, int);
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int()(int,int)。
指向函数指针数组的指针声明形式:type (* (*func )[ ])(参数列表)
其中(* pfunarr2)[3]表示数组指针,而void(* )( )表示函数指针,两者结合起来就是指向函数指针数组的指针。
x = (*fun)();
x = fun();
两种调用函数的方式,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数。
指针函数¶
指针函数就是返回指针值的函数,本质是一个函数。
声明形式:type *func (参数列表)
int *fun(int x,int y);
指针函数等价于“返回值为指针的函数”。从上面的定义形式可以看出,函数指针和指针函数的直观上区别在于指针符号*与函数名/指针名有没有用括号()包裹起来,从这一点来看是很容易区分两者的。
备注
函数名带括号的就是函数指针,否则就是指针函数。
函数的递归¶
程序调用自身的编程技巧称为递归(recursion),递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复运算,大大减少了程序的代码量
递归的主要思考方式在于:化繁为简。递归的两个必要条件 * 1.存在限制条件,当满足这个限制条件的时候,递归便不再继续 * 2.每次递归调用之后越来越接近这个限制条件。