用指针解释复杂的typedef

时间:2016-03-13 07:09:30

标签: c++ typedef

我在一个简单的C ++应用程序中遇到了以下typedef

typedef char *(*TEXT_FUNCTION)();

我对C ++比较陌生,需要一些帮助来理解它的作用。稍后在代码中,TEXT_FUNCTION在语句

中引用
TEXT_FUNCTION textfunction = reinterpret_cast<TEXT_FUNCTION>(
    GetProcAddress(myDLLHandle, "getName")
);

查看GetProcAddress()的{​​{3}},我理解该语句返回getName()引用的DLL中myDLLHandle函数的地址。我假设整个演员声明将getName()函数的某种指针分配给textfunction

这准确吗? typedef语句的每个部分是什么意思?

2 个答案:

答案 0 :(得分:0)

typedef char *(*TEXT_FUNCTION)();定义了一个名为TEXT_FUNCTION的函数指针类型,它不带参数并返回char*

在按textfunction函数的地址分配getName()之后,可以将其命名为:

char* sth = textfunction();

与以下内容具有相同的效果:

char* sth = getName();

答案 1 :(得分:0)

类型声明应按通常的表达式评估的相反顺序阅读。

表达的通常评价就像

* // 4. dereference 3
  (
    * // 2. dereference 1
      TEXT_FUNCTION // 1. read what is in TEXT_FUNCTION
  )
  (); // 3. call function 2

所以,类型声明

char *(*TEXT_FUNCTION)();

装置

char // 1. char
  * // 2. a pointer to 1
    (
      * // 4. a pointer to 3
        TEXT_FUNCTION // 5. TEXT_FUNCTION is 4
    )
  (); // 3. a function that takes 0 arguments and returns 2

因此,typedef语句意味着将TEXT_FUNCTION声明为指向带有0个参数的函数的指针,并返回指向char的指针。