函数指针:
int (*p)(int x, int y)
函数名代表首地址
//
声明了一个返回值为
int,
拥有两个整型参数的函数指针
p
// 指针的类型是 int (*)(int, int) int (*p)( int a, int b) = NULL ; // 函数名就是地址,当指针与函数建立指向关系之后,我们就可以用指针代替函数名进行操作。 p = sum ; printf ( "%d" , p( 2 , 4 )); p = maxValue ; // 如果函数的类型与函数指针的类型完全相同,那么可以用一个函数指针指向多个函数。(指针重指向) //int (*p2)(int a, int b) = maxValue;
printf("%d", p(5, 8));
|
//
使用
typedef
给指定变量重新起一个新名字,新的名字还写在指针名的位置,覆盖掉原来的名字。
typedef int (*CF)( int a, int b); //typedef 只是声明了一个类型,真正需要使用该指针变量的时候要创建一个函数指针变量。
typedef int (*CF)( int a, int b); //typedef 只是声明了一个类型,真正需要使用该指针变量的时候要创建一个函数指针变量。
CF cf = sum;//
创建一个
CF
类型的函数指针变量
cf
#import
<Foundation/Foundation.h>
int
sum(
int
x,
int
y);
int sum( int x, int y){ return x + y;
}
int
maxValue(
int
a,
int
b);
int maxValue( int a, int b){ return a > b ? a : b;
}
int
main(
int
argc,
const
char
* argv[]) {
int (*p)(int a, int b) = sum;//函数名就是地址,不用写后面的参数
int x = p(30, 20 ); printf ( "%d" , x); return 0 ;
}
|
#import
<Foundation/Foundation.h>
typedef
int
(*PFUN)(
int
,
int
);
// 相当于把 int (*)(int, int) 改成了 PFUN ,之后就可以使用 PFUN 代替整个 int sum( int x, int y); int sum( int x, int y){ return x + y;
}
int
maxValue(
int
a,
int
b);
int maxValue( int a, int b){ return a > b ? a : b;
}
int
main(
int
argc,
const
char
* argv[]) {
PFUN p = NULL;
p = sum ; int x = p( 30 , 20 );
printf("%d", x);
return
0
;
}
|
.m
void
printHello(){
printf ( "Hello!" );
}
void
print(
PH
ph){
ph();
}
|
.h
typedef
void
(*PH)();
void
printHello();
void
print(
PH
ph);
|
main.m
print
(
printHello
);
|
用函数回调找出一个学生结构体中分数高于90的学生,在名字后面添加 高富帅 三个字
.h
void
addStr(
char
*name);
//
名字加高富帅
void findStudentByScore( Student *stu, int count, void (*p)( char *)); // 遍历比较学生的分数,查找出高于 90 分的回调 addStr 函数
void
pringAllStudent(
Student
*a,
int
count);
//
输出所有学生信息
|
.m
void
addStr(
char
*name){
strcat (name, "---- 高富帅 " );
}
void
findStudentByScore(
Student
*stu,
int
count,
void
(*p)(
char
*)){
for ( int i = 0 ; i < count; i++) { if (stu[i]. score > 90 ) { p(stu[i]. name ); } }
}
void
pringAllStudent(
Student
*a,
int
count){
for ( int i = 0 ; i < count; i++) { printf ( "%s %d %c %.2f\n" , a[i]. name , a[i]. age , a[i]. sex , a[i]. score ); }
}
|
main.m
Student
stu[] = {
{ "maomao" , 20 , 'm' , 89 }, { "paopao" , 21 , 'f' , 91 }, { "huahua" , 36 , 'm' , 96 }, { "lulu" , 23 , 'f' , 85 }, { "ganggang" , 58 , 'm' , 55 }
};
findStudentByScore
(stu,
5
,
addStr
);
pringAllStudent(stu, 5);
|