C语言中函数指针的例子

// zhizhen.cpp : 定义控制台应用程序的入口点。
/*
    函数指针的例子
    061105
*/



#include 
<stdio.h>
#include 
<stdlib.h>


typedef 
int (*FUN)(int a ,int b);        //函数指针类型,功能和下面main方法中的函数指针一样
int compare(const void* a, const void* b);        //声明compare
char* list[5]={"cattle","car","cabet","cap","canon"};        //全局字符串数组
static int i = 0;
/*
    函数指针的例子
*/

int add(int a,int b)
{
    
return a+b;
}


/*
    测试函数指针的例子
*/

void test()
{
    
//int (*fPtr)(int a,int b);    //定义一个函数指针
    FUN fPtr;
    fPtr 
= add;
    printf(
"8 add 4 is:%d",fPtr(8,4));
    scanf(
" ");
}
//test


/*
    函数指针作函数参数
*/

void SortWithCompare()
{
   
int i = 0;
   
//为了达到一种通用性.这里使用qsort时要把数组转成void*型的,qosrt的函数声明如下(详细qsort见qsort.c)
    /*
        void __cdecl qsort (
                    void *base,
                    size_t num,
                    size_t width,
                    int (__cdecl *comp)(const void *, const void *)
                    )
    
*/

   
//数组类型有多少个,比较大小的方法就有多少了,这样的话,编译器是写不过来的,这里有没有面向对像的装箱和拆箱
   
//虽然这里char **与void*的转换有点像装箱和拆箱.
   
//所以,比较两个元素的方法就要自己写了,试想一下还有结构体数组也要来排序怎么办??
  qsort((void*)list,5,sizeof(list[0]),compare);        
  
for(i=0; i<5; i++)
    printf(
"%s\n",list[i]);

}
//SortWithCompare

/*
    用于向qsort中传入用来比较字符串数组中的任两个元素的大小
*/

int compare(const void* a, const void* b)
{
    i
++;
    printf(
"第%d次使用compare:a=%s,b=%s\n",i,*(char**)a,*(char**)b);
    
return strcmp(*(char**)a, *(char**)b);
}
//compare

void main()
{
    SortWithCompare();
    scanf(
" ");
}
//main
上面是一个小例子,觉得在C中的指针和C#的代理是一个意思.大家可以对比去看看
posted @ 2006-11-05 17:09  刘寅  阅读(4116)  评论(0)    收藏  举报