内容*和---同优先级,右键
*p; 等效于//*(p ),效果:先取p的内容,将p
注意:
数组名称是常数,不能
[]的优先顺序是*
//p和[]先组合,指示p为数组
int *p[5]; //p是包含五个int *元素的数组
//p和*先组合,指示p是指针
int(p ) [5]; //p是指向int [5]数组的指针
() )的优先顺序为*
函数的调用既可以使用函数名称,也可以使用函数指针
int*f(intI ); //f和) )组合表示f在函数中返回指针
int(*f ) ) int i ); //f和*相组合,f是指向函数的指针
不能运算p等函数指针
函数指针智能由相同类型的函数名称、参数和返回类型相同的函数指针和NULL初始化
使用函数指针:
#包含
#define GET_MAX 0
#define GET_MIN 1
intget_max(intI,int j ) {
return ij? I; j;
}
intget_min(intI,int j ) {
return ij? j:i;
}
intcompare(intI、int j、int flag ) {
int ret;
int(*p ) ) int,int ); //函数指针,形状参数为2个int,返回值为int
if(flag==get_max ) {
p=get_max; //函数指针赋值
}else{
p=get_min; //按函数名称为函数指针赋值
}
ret=p(I,j );
返回ret;
}
int main () )。
int i=5,j=10,ret;
ret=compare(I,j,GET_MAX );
返回0;
}
将函数指针作为形状参数
intget_big(intI,int j ) {
return ij? i:j;
}
intget_max(intI,int j,int ) p (int,int ) )//声明
int ret;
ret=p(I,j );
ret=p(ret,k );
返回ret;
}
int main () )。
ret=get_max(I,j,get_big ); //按函数名称分配函数指针
返回0;
}
函数指针还可以返回值
intget_big(intI,int j ) {
return ij? i:j;
}
int(*get_function(inta ) ) int,int ) ) /返回值为函数指针int(* ) int,int ) ) ) )。
printf(thenumberis%d(n ),a );
return get_big;
}
int main () )。
int i=5,j=10,max;
int(*p ) ) int,int ); //声明函数指针
p=get_function(100; //用返回值为函数指针赋值
max=p(I,j );
printf(themaxis%d(n ),max );
返回0;
}
分析:
int(*function(inta ) ) int,int ) ) )。
高于* )优先级高,函数名称function和(组合,function函数的自变量为int a
返回值为函数指针int(* ) (int,int ) )