指针函数和函数指针
指针函数
指针函数为一个返回指针的函数,本质上是一个函数,该函数的返回值是一个指针。
int *function(char *s,int length)
即指针函数为返回一个int类型的指针,是一个地址。
指针函数的写法
int * function(char *s,int length)
int* function(char *s,int length)
int *function (char *s,int length)
以上三种写法均无问题,看个人写法。
实例:
typedef struct
{
int ni;
float ui;
int si[10];
}data;
//定义一个结构体data;
data *funsd(int a,float b)
{
data *sp;
sp=(data *)malloc(sizeof(data));
sp->ni=a;
sp->ui=b;
return sp;
}
//返回data型指针的函数
data *mydata=funsd(187,58.66);//引用为定义一个mydata的结构体指针,其地址为函数的返回地址。
printf("%d\r\n",mydata->ni);
printf("%f\r\n",mydata->ui);
函数指针
函数指针的本质是一个指针,该指针指向这个函数。总的来说函数指针就是指向该函数的指针。
int (*function)(char *s, int count)
函数指针需要一个函数把地址赋值给他。
function= &yy1;
function= yy1;
调用函数指针的方式
x=(*fun)(); //这种方式便于理解
x=fun();
例程:
int f1(int a,int b)
{
return a+b;
}
int f2(int a,int b)
{
return a*b;
}
int (*fune)(int a,int b);//定义一个函数指针
fune=&f2;//函数指针的地址为函数f2的地址。
//fune=f1;也可以使用这种表达方式
printf("%d\r\n",(*fune)(99,45));//函数指针的调用。
两者区别
****指针函数:int* fun(int x,int y);
函数指针:int (*fun)(int x,int y);
可以简单粗暴的理解为,指针函数的*是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。****