添加指针的目的是什么: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?
*PUCHAR
是 unsigned char**
,而不是 char*
。但是如果我正确理解你的问题并且你的意思是“使用 unsigned char*
而不是 PUCHAR
”,是的,你可以。但前提是您了解基础类型。
开发人员使用这样的自定义 typedef 的原因可能很少。它可能是为了适应多个平台,适应不同的架构,个人意见等......在不知道真正的底层类型的情况下,我们实际上可能会在转换为另一种类型的过程中丢失信息。
添加指针的目的是什么: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?
*PUCHAR
是 unsigned char**
,而不是 char*
。但是如果我正确理解你的问题并且你的意思是“使用 unsigned char*
而不是 PUCHAR
”,是的,你可以。但前提是您了解基础类型。
开发人员使用这样的自定义 typedef 的原因可能很少。它可能是为了适应多个平台,适应不同的架构,个人意见等......在不知道真正的底层类型的情况下,我们实际上可能会在转换为另一种类型的过程中丢失信息。