全部博文(776)
分类: C/C++
2010-02-23 11:35:45
1.定义指向函数的指针变量
形式如下:
类型标识符(*变量标识符)();
类型标识符是指针变量所指向的函数类型,变量标识符是指向函数的指针变量名。
例如:
int(*p)();
定义了一个指向函数的指针变量p,它可以存放一类整型函数的入口地址,程序中把哪一 个函数的入口地址赋给它,它就指向哪一个函数。
说明:
(1)定义指向函数的指针变量,可以指向一类函数。
(2)定义指向函数的指针变量时,括号不能省略。
形式int*p()定义的是指针函数头,返回值是指向整型数据的指针值,而不是指向函数的指针变量。
(3)对指向函数的指针变量p,p+i、p++、p--等运算无意义。
2.让指针变量指向函数
定义了指向函数的指针变量,就可以在指针变量与特定函数之间建立关联,让指针变量指向特定函数。
建立关联的方法为:
指针变量一函数名;
说明:
(1)指针变量只能指向定义时所指定的一类函数。
(2)一个指针变量可以先后指向多个不同的函数。
3.利用指针实现函数调用
指针变量一旦指向某函数,利用指针所指向的变量可以实现函数调用。
一般形式:
(* 指针变量)(实参表);
例子:
#include
#include
#include
#include
int numcmp(char *a, char *b);
int stringcmp(char *a, char *b);
void check(char *a, char *b, int (*cmp)());
void main(void)
{
char s1[80], s2[80];
gets(s1);
gets(s2);
if (isalpha(*s1))
check(s1, s2, stringcmp);
else
check(s1, s2, numcmp);
getch();
}
void check(char *a, char *b, int (*cmp)())
{
printf("testing for equality\n");
if (!cmp(a, b))
printf("equal");
else
printf("not equal");
}
int numcmp(char *a, char *b)
{
if (atoi(a) == atoi(b))
return 0;
else
return 1;
}
int stringcmp(char *a, char *b)
{
if (!strcmp(a, b))
return 0;
else
return 1;
}