用指针解释复杂的类型定义

Interpreting complex typedef with pointers

本文关键字:类型 定义 复杂 指针 解释      更新时间:2023-10-16

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

typedef char *(*TEXT_FUNCTION)();

我对C++相对较新,需要一些帮助来理解它的作用。在代码的后面,语句中引用TEXT_FUNCTION

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

查看 MSDN 文档以获取GetProcAddress(),我了解到该语句返回 myDLLHandle 引用的 DLL 中getName()函数的地址。我假设整个 cast 语句将某种指向 getName() 函数的指针分配给 textfunction .

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

类型声明应按通常表达式计算的相反顺序读取。

通常对表达的评估会像

* // 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 的指针。

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

在通过函数getName()的地址赋值textfunction后,可以称为:

char* sth = textfunction();

具有相同的效果:

char* sth = getName();