Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4192302
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: 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;
}

阅读(950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~