函数指针与指针函数的区别
函数指针与指针函数的区别
函数指针:
关键字为指针,不过其数据访问方式为一类函数。
如:int (*math)(int,int);定义了一个指针math,它的数据访问方式为返回值为int,形参为(int,int)的一类函数。我们可以把这类函数的函数名赋值给math,这样math指针就指向了这个函数,你就可以通过(*math)(int,int)调用这个函数。
代码如下:
#include <stdio.h>
int add(int,int);
int sub(int,int);
int main(void)
{
int a=8;
int b=4;
int c;
int (*math)(int,int);
math=add;
c=(*math)(a,b);
printf("a+b=%d\n",c);
return 0;
}
int add(int x,int y)
{
return (x+y);
}
int sub(int x,int y)
{
return (x-y);
}
指针函数:
关键字是函数,不过这个函数的返回值是一个指针。
代码如下:
#include <stdio.h>
float* search(float (*p)[4],int n)
{
float *m;
m=*(p+n);
return m;
}
int main(void)
{
float a[3][4]={11,12,13,14,21,22,23,24,31,32,33,34};
float n;
int i;
float *o;
printf("input n:\n");
scanf("%f",&n);
o=search(a,n);
for(i=0;i<4;i++)
printf("%f ",*(o+i));
printf("\n");
}
注意:这个代码可以理解为有三个学生,序号分别为0,1,2,每个人有四门成绩,输出指定学生的四门科成绩!
float (*p)[4]:数组指针,类型为指针不过它的数据访问方式为四个float数据。可理解为(*p)为一个指针,其指向float[4]数组。