函数指针:指向函数的指针:本质是个指针
指针函数:返回值是指针的函数:本质是个函数
指针函数(返回值是个指针)
返回值是个指针和函数没有区别,区别就是返回值的不同。int f(),int* f();一个的返回值是整数,一个的返回值是指针。
int* f1(int a)
{
printf("a^2=%d", a*a);
return &a;
}
调用:f(1);
输出:a^2=4
函数指针(指向函数的指针)
#include <stdio.h>
#include<stdlib.h>
int f(int a)
{
printf("a = %d\n", a);
return 0;
}
int (*p)(int a);//指向函数 f(int a)的指针
//分析 该函数指针,指向一个函数int f(int a)
// 指向函数的类型,是个返回值为int类型的函数
//p是个函数指针,是个地址变量
//把某个函数的地址给他,就可以调用他
int main()
{
p = f;
p(2);
getchar();
return 0;
}
输出:a = 2
回调函数
本质就是把函数指针作为一个函数的参数
这个用法很有用。具体可以看我数据结构关于链表的笔记,里面有关于打印数据用回调函数的使用例子。
// list.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <stdio.h>
#include<stdlib.h>
int f(int a)
{
printf("a = %d\n", a);
return 0;
}
int (*p)(int a);//指向函数 f(int a)的指针
//分析 该函数指针,指向一个函数int f(int a)
// 指向函数的类型,是个返回值为int类型的函数
//p是个函数指针,是个地址变量
//把某个函数的地址给他,就可以调用他
void call(int (*pf)(int a))
{
pf(2);
}
int main()
{
call(f);
getchar();
return 0;
}
问题1:函数指针能不能强制类型转换?
问题2:函数指针所指函数的形式不一样,比如,函数指针和要调用的函数参数个数不一样,或者参数类型不一致的时候,,能不能调用?
还有一种写法
思考这种写法的意思。
int* (*p)(int a);
分析,这是个函数指针,指向函数的指针,p
这个函数的类型是int*。即返回值是一个地址的函数。