函数指针:用来存放函数的地址,该地址是一个函数的入口地址。
函数名代表了函数的入口地址。
函数指针的变量说明一般形式:
<数据类型>( *<函数指针名称>)(<参数说明列表>);
- <数据类型>是函数指针所指向的函数的返回值类型。
- <参数说明列表>应该与函数指针所指向的函数的形参说明保持一致。
- ( * <函数指针名称>),*说明为指针 ,()不可或缺,表明为函数的指针。
函数指针数组是一个保存若干个函数名的数组。
与指针数据一样,在指针名后加数组即可!
问题一:运用函数指针数组简单实现数字加减;
代码如下:
int sum(int a,int b){
return a+b;
}
int cha(int a,int b){
return a-b;
}
int main(int argc, char *argv[]) {
int m,n;
printf(“请输入两个数:”);
scanf("%d %d",&m,&n);
int (*p[2])(int,int);
p[0]=sum;
p[1]=cha;
int s=(*p[0])(m,n);
int d=(*p[1])(m,n);
printf(“输出两个数的和:%d\n”,s);
printf(“输出两个数的差:%d”,d);
return 0;
}
问题二:指针函数实现数字转字符串;
代码如下:
char *shift(int);
int main(int argc, char *argv[]) {
char *p;
int n=369;
printf(“转化前数字:%d\n”,n);
p=shift(n);
printf(“转化后的字符串:%s”,p);
return 0;
}
char *shift(int n){
static char ch[30];
char *a;
a=ch;
int i=0;
while(n){
int r;
r=n%10;
n=n/10;
ch[i]=r+‘0’;//数字与字符串数字的差值是48,而0的ASCII码刚好是48,所以+‘0’;
i++;
}
ch[i]=’\0’;
/*******将目前数组中的字符进行逆序排序,因为目前i指向的是’\0’,为了从第一个有效字符开始,所以先i–;然后第一个数据的下标和最后一个比较,最后通过中间值进行数据转置。
i–;
int j=0;
while(j<=i){
char g;
g=a[i];
a[i]=a[j];
a[j]=g;
j++;
i–;
}
return a;
}