15. 指针函数和函数指针
一、指针函数:返回指针的函数
注意事项:
1.不应该返回参数的地址:
如果返回的指针保存了参数的地址,则当函数调用完成后,返回的指针引用了一个栈 外地址,函数调用完成后参数会被释放。此地址会被新的函数占用并修改。
2.不应该返回局部变量的地址:
如果返回的指针保存了局部变量的地址,则当函数调用完成后,返回的指针引用了一个栈外地址,函数调用完成后局部变量会被释放。此地址会被新的函数占用并修改。
二、函数指针:指向函数的指针
函数第一条被执行的地址称为函数的首地址。
函数名表示函数首地址的常量。
函数指针可以在运行时修改行为。
业务(行业逻辑)和界面分离,
业务(行业逻辑)和常用算法分离。
1.熟悉基本语法
要想把一个函数赋值给函数指针,必须满足:
A.同参数个数
B.同参数类型
C.同参数顺序
D.同返回值
E.同调用约定
这样的函数指针,才是同类型的函数指针。
函数指针常用于接口设计。
int _cdecl Add(int ary[], int) {
//...
}
int(_cdecl * PFNFUNC)(int ary[], int) = Add;
或者
typedef int(_cdecl *PFNFUNC)(int ary[], int);
PFNFUNC func = Add;
func(...)//间接调用
宏是编译前,预处理器对源码文本做查找替换。
typedef可以取别名,进一步说明其类型意义时使用。它让编译器实实在在地认为有了 这个新类型。
typedef int Length;
typedef float Height;
Length length = 100;
Height height = 195.4;
生成的预处理文件依然保留了以上4条语句,未替换。
2.掌握内存原理
3.了解设计理念