一、高阶知识点
- 函数地址作为函数参数
C 语言中函数和变量类似,也是有自己的内存地址的。- 在 C 语言中把函数传入另一个函数。
- 当
g
函数传入参数时,参数接收的是函数f
,而不是变量,当这个f
不同时,实现上依赖了它的函数g
就可能表现出不同的结果。int g(float (*f)(int), int a) { return f(a); }
在将其作为函数参数进行传递时,需要传递它的地址。
对于上面这种用情况,函数g需要有一个形式参数用于接收函数地址。将得到一个如上面所示形式的函数。
- 第一个参数需要一个返回值类型为float且有一个int类型参数的函数。
- 第二个参数就是普通的int类型的值。
在 C 语言中,直接写 f(a) 其实就可以通过这个地址使用这个函数,并且给它传入一个参数 a。【与用取值符取出函数地址并进行函数调用 (*f)(a) 的方式是等价的。】
- 计算结构体成员偏移量【待补充】
- 函数作为形参时的调用,容易出错。【待补充】
- 共用体
- 使多种不会同时出现的变量共用同一块内存成为了可能。