文章目录
基本介绍
1)函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数
2)简单的讲:回调函数是由别人的函数执行时调用你传入的函数(通过函数指针完成)
应用实例
使用回调函数的方式,给一个整型数组 int arr[10] 赋 10 个随机数.
#include <stdlib.h>
#include <stdio.h>
// 回调函数
//1. int (*f)(void)
//2. f 就是 函数指针 , 它可以接收的函数是 (返回 int ,没有形参的函数)
//3. f 在这里被 initArray 调用,充当了回调函数角色
void initArray(int *array, int arraySize, int (*f)(void)) {
int i ;
//循环 10
for ( i=0; i<arraySize; i++) {
array[i] = f(); //通过 函数指针调用了 getNextRandomValue 函数
}
}
// 获取随机值
int getNextRandomValue(void) {
return rand();//rand 系统函数, 会返回一个随机整数
}
int main(void) {
int myarray[10],i; //定义一个数组和 int
//说明
//1. 调用 initArray 函数
//2. 传入了一个函数名 getNextRandomValue (地址), 需要使用函数指针接收 每个函数都是一个地址。
initArray(myarray, 10, getNextRandomValue);
//输出赋值后的数组
for(i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
printf("\n");
return 0;
}
指针的注意事项和细节
1)指针变量存放的是地址,从这个角度看指针的本质就是地址。
2)变量声明的时候,如果没有确切的地址赋值,为指针变量赋一个 NULL 值是好的编程习惯。
3)赋为 NULL 值的指针被称为空指针,NULL 指针是一个定义在标准库 <stdio.h>中的值为零的常量 #define NULL 0
4)指针使用一览 (见后)
5)案例演示
#include <stdio.h>
void main() {
int *p = NULL; // p 空指针
int num = 34;
p = #
printf("*p=%d", *p); // 34
printf("\np的地址值为 %p, p指向的地址值为 %p, p指向的值为%d",&p,p,*p);
printf("\nnum的地址值为 %p",&num);
}