指向类型强制转换和取消引用指针的指针
Pointer to Type Cast & Dereferenced Pointer
学习C++并解开别人的代码,这一点让我感到困惑:
ACCOUNTDATA *cd = (ACCOUNTDATA *)*pi
pi 最初似乎指向相同类型的结构 ACCOUNTDATA。
我已经在 SO 和其他地方搜索了指针到指针、指针和括号(优先级顺序(,并遇到使用这样的括号来键入 cast。现在,我不确定它是指向指针到指针的指针(括号无用(,还是指向已类型转换和取消引用的指针的指针,或者完全是其他东西。
ETA:我尽可能精简相关代码:
typedef struct ACCOUNTDATA_
{
//declare member data here
}ACCOUNTDATA;
//unrelated code here
BOOL SDMessage(DWORD objID, DWORD *pi, UINT messageID, DWORD param1, DWORD param2)
{
switch (messageID)
{
case SD_CREATE_PLUGIN:
ACCOUNTDATA *cd = (ACCOUNTDATA *)malloc(sizeof(ACCOUNTDATA));
//initialize member data here
*pi = (DWORD)cd;
case SD_SAVE_DATA:
//unrelated code here
ACCOUNTDATA *cd = (ACCOUNTDATA *)*pi;
}
}
DWORD 不是C++类型,它在
这就像您将结构的地址存储在通用指针变量中并将该指针变量的地址传递给其他函数一样。因此,当您需要在调用的函数中访问该地址时,您需要取消引用并将该变量键入特定类型。
pi
是一个指向DWORD
的指针,这是一个unsigned long
值。 由于存在从unsigned long
到指针类型的显式强制转换,反之亦然,因此早期您的代码利用它将ACCOUNTDATA*
转换为DWORD
,然后将其存储在pi
指向的内存中。 你的行首先取消引用pi
的内存,其中包含一个DWORD
。 然后它将该DWORD
转换回ACCOUNTDATA*
,并将其存储在cd
中。 在行中从未接触过实际的ACCOUNTDATA
对象,而是首先取消引用指向该对象的指针,然后将存储指向它的指针值的DWORD
的取消引用值分配给另一个变量,并强制转换为原始指针类型。
pi 已被类型转换为 ACCOUNTDATA 指针类型
- C++ 关于指针取消引用的技术问题
- 共享指针取消引用错误
- 为什么我在C++中有一个空指针取消引用
- 对指针取消引用的混淆
- 指针取消引用:无法将“节点**”转换为“节点*”
- 是否有某种功能,指针取消给出了rvalue
- 返回指针取消引用的 c++ 会导致分段错误
- cppcheck null指针取消引用:m_buffer-否则,针对null进行检查是多余的
- Cppcheck可能的空指针取消引用:
- 通过基类指针取消引用
- C++中的安全指针取消引用
- 为什么我的链表"next"指针取消引用错误的内存(XCode,C++)
- 数组访问导致空指针取消引用
- C++控制内存访问和指针取消引用
- C++指针取消引用
- C/C++ 双指针取消引用问题
- 优化器删除指针取消引用行
- C/C++ 指针取消引用的问题
- 在c++中将指针取消引用到引用中
- 指针取消引用