1.指向函数的指针
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的
首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指
向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量
称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
例如:
int (*p)();
注意:*p两侧的()不能省,不然就变成函数的返回值是指向整型变量的指针。
#include<stdio.h>
#include<Windows.h>
int main()
{
int Max(int,int);
int (*p)(int,int); //定义指向函数的指针变量p
int a,b,c;
p=Max;
printf("please enter a and b:");
scanf("%d%d",&a,&b);
c=(*p)(a,b);
printf("a=%d\nb=%d\nMAx=%d\n",a,b,c);
system("pause");
return 0;
}
int Max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
2.返回指针值的函数
在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
...... //函数体
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符
表示了返回的指针值所指向的数据类型。
如:
int *a(int x,int y)
{
… /函数体/
}
表示 a 是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
注意:在“*a”两侧没有括号。
#include<stdio.h>
#include<Windows.h>
int main()
{
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float *scearh(float(*pointer)[4],int n);
float *p;
int i,k;
scanf("%d",&k);
p=scearh(score,k); //调用search函数,返回score[k][0]的地址
for(i=0;i<4;i++)
{
printf("%5.2f\t",*(p+i)); //输出score[k][0]~score[k][3]的值
}
printf("\n");
system("pause");
return 0;
}
float *scearh(float(*pointer)[4],int n) //形参pointer是指向一维数组的指针变量
{
float *pt;
pt=*(pointer+n-1);
return pt;
}