C语言定义函数指针时的typedef怎么理解

2025-04-07 12:58:50
推荐回答(3个)
回答1:

可以不用,如果你愿意一直写影响阅读的代码。

你可以比较两种方式的编写难度和阅读难度:注释和没注释的部分

typedef int zhengxing;//要定义别名的类型为int,定义的别名为zhengxing

typedef void (*intFunc)(int);//要定义的类型是void (*)(int),即参数一个int,什么也不返回的函数指针,定义的别名是intFunc。


typedef int (*ADD2_FUN) (int, int);
typedef int (*ADD3_FUN) (int, int, int);
static int add2(int a, int b)
{
    return a+b;
}
static int add3(int a, int b, int c)
{
    return a+b+c;
}
static const void *getFunPtr(const char *name)
{
    if(name)
    {
        if(strcmp(name, "add2") == 0)
        {
            return (void *)&add2;
        }
        else if(strcmp(name, "add3") == 0)
        {
            return (void *)&add3;
        }
    }
    return NULL;
}
int main()
{
    /*int (*add3) (int, int, int) = (int (*) (int, int, int))getFunPtr("add3");
    cout << (*add3)(1, 2, 3) << endl;*/
    ADD3_FUN add3 = (ADD3_FUN)getFunPtr("add3");
    cout << (*add3)(1, 2, 3) << endl;
    return 0;
}

回答2:

可以,在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。

回答3:

C语言中typedef用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
typedef struct tagMyStruct
{
int iNum;
long lLength;
}MyStruct;