添加指针的目的是什么:typedef unsigned char UCHAR, *PUCHAR;

What is the purpose of adding a pointer in: typedef unsigned char UCHAR, *PUCHAR;

添加指针的目的是什么:typedef unsigned char UCHAR, *PUCHAR; (还有很多其他带有附加指针的typedef示例)我发现UCHAR旁边是*PUCHAR指针并检查了sizeof(UCHAR)和sizeof(PUCHAR)结果是1个字节和8个字节。这个指针大小是固定的还是灵活的?在一行中使用不同大小的数据类型制作 typedef 是否正确?如果OS将来将寻址扩展到128位(16字节)怎么办?

在确定寻址扩展的情况下,创建这么多数据类型的目的是什么?

typedef unsigned char UCHAR, *PUCHAR;

(...)

  2.2.16 HANDLE
  2.2.17 HCALL
  2.2.18 HRESULT
  2.2.19 INT
  2.2.20 INT8
  2.2.21 INT16
  2.2.22 INT32
  2.2.23 INT64
  2.2.24 LDAP_UDP_HANDLE
  2.2.25 LMCSTR
  2.2.26 LMSTR
  2.2.27 LONG
  2.2.28 LONGLONG
  2.2.29 LONG_PTR
  2.2.30 LONG32
  2.2.31 LONG64
  2.2.32 LPCSTR
  2.2.33 LPCVOID
  2.2.34 LPCWSTR
  2.2.35 LPSTR
  2.2.36 LPWSTR
  2.2.37 NET_API_STATUS
  2.2.38 NTSTATUS
  2.2.39 PCONTEXT_HANDLE
  2.2.40 QWORD
  2.2.41 RPC_BINDING_HANDLE
  2.2.42 SHORT
  2.2.43 SIZE_T
  2.2.44 STRING
  2.2.45 UCHAR
  2.2.46 UINT
  2.2.47 UINT8
  2.2.48 UINT16
  2.2.49 UINT32
  2.2.50 UINT64
  2.2.51 ULONG
  2.2.52 ULONG_PTR
  2.2.53 ULONG32
  2.2.54 ULONG64
  2.2.55 ULONGLONG
  2.2.56 UNICODE
  2.2.57 UNC
  2.2.58 USHORT
  2.2.59 VOID
  2.2.60 WCHAR
  2.2.61 WORD

UCHAR 代表 unsigned char,大小为 1 个字节。 PUCHAR 代表 unsigned char*。要存储指针,您需要 8 个字节(在 64 位应用程序中)。这就是为什么 UCHAR 的大小是 1 个字节而 PUCHAR 的大小是 8 个字节的原因。

为什么一个指针是8个字节?
那是因为在 64 位应用程序中,单个字节的地址有 64 位。为了表示这一点,您需要 64 位。这就是为什么它需要 8 位。

Can't we just use *char instead of *PUCHAR or maybe it's some hidden meaning for making so much data types?

*PUCHARunsigned char**,而不是 char*。但是如果我正确理解你的问题并且你的意思是“使用 unsigned char* 而不是 PUCHAR”,是的,你可以。但前提是您了解基础类型。

开发人员使用这样的自定义 typedef 的原因可能很少。它可能是为了适应多个平台,适应不同的架构,个人意见等......在不知道真正的底层类型的情况下,我们实际上可能会在转换为另一种类型的过程中丢失信息。