首页 > 用户发贴区 > 编程问题提问区 > 请教一个题目?
2006
08-30

函数指针:
定义:typedef void (F1)(int p1, int p2)
   typedef void (*F2)(int p1, int p2)
   test (int p1, int p2);


   F1 * fp1;
   F2  fp2;
   F1  fp3;
问: 语句
fp3 = test;
fp2 = test;
fp1 = test
是否成立?
答案:第一条语句有错,其余两条语句正确。


typedef void (F1)(int p1, int p2) 是什么意思??


请教一个题目?》有 5 条评论

  1. peterzhu_1 说:

    自己解释下:

    typedef 可以用来声明新的类型名来代替已有的类型:

    typedef void (F1)(int p1, int p2)  就是说:

    F1是这样一种类型:它是一个无返回值的函数类型

    F1 * fp1,fp1是一个指向函数的指针变量,所以fp1=test是正确的

    而F1 fp3,fp3是一个无返回值的普通函数,故fp3=test是错误的

  2. 冰的热度 说:

    不会吧,明明是fp3 = test;对,而后两句错呀,你是不是看错了?

  3. xstar 说:

    函数指针的问题:

    函数是有地址的,函数名就是函数的地址(函数指针).
    //先看F2的定义
    typedef void (*F2)(int p1, int p2); // 首先F2是一个函数指针类型,指向的是带两个int型参数的函数,返回类型是void型的.

    F2  fp2; // 定义一个变量,类型是F2函数指针类型的
    fp2 = test; // 指向函数

    //类似的F1
    typedef void (F1)(int p1, int p2); // F1是个函数类型,带两个int型参数的函数,返回类型是void型的.

    F1 *fp1; // 定义一个指针变量.类型是F1函数类型.
    fp1 = test; // 指向函数

    //fp3不是指针类型的变量,所以把函数地址赋值给他的时候是错误的.
    F1  fp3;
    fp3 = test;

    当然如果写成如下的形式就正确了!
    F1 &fp3 = test; // fp3是test的引用

    xstar38960.6558333333

  4. xstar 说:

    其实typedef void (F1)(int p1, int p2);和typedef void (*F2)(int p1, int p2);原理等同于下面的.

    typedef int * PINT;
    typedef int    INT;

    PINT pInt;
    INT *pInt;

    还有注意的是void (*F2)(int p1, int p2)中第一个括号不能省略.否则变成这样
    void *F2(int p1, int p2)就是定义一个函数了.

  5. peterzhu_1 说:

    版主解释得太好了,真厉害啊!!

留下一个回复