C++结构体指针强制转换两种类型及其区别

	pGenData = (TGenData*)&(m_pRxdFm_JC103->bGenData);		//将从NGD后边的内容赋值给pGenData
	PBYTE buffngd = (BYTE*)&pGenData;

	BYTE* pData = &(m_pRxdFm_JC103->bData);

这两段语句分别代表啥意思,有什么区别?

让我们逐一解释这两段代码,它们的含义和区别:

1. 第一段代码

pGenData = (TGenData*)&(m_pRxdFm_JC103->bGenData); // 将从NGD后边的内容赋值给pGenData
PBYTE buffngd = (BYTE*)&pGenData;
  • 第一行pGenData = (TGenData*)&(m_pRxdFm_JC103->bGenData);

    • 含义:这行代码是将 m_pRxdFm_JC103 对象中的 bGenData 成员的地址进行强制类型转换,然后赋值给 pGenData
    • m_pRxdFm_JC103 是一个结构体或者类的指针,指向一个名为 bGenData 的成员变量。bGenData 的类型可以是一个简单的字节类型数组或某种数据结构。
    • (TGenData*)&(m_pRxdFm_JC103->bGenData) 将这个成员的地址转换为 TGenData* 类型,表示它将被视为 TGenData 类型的数据。
    • 这样做通常用于根据数据结构的定义去操作数据,假设 TGenData 是一个定义好的数据结构,这样 pGenData 就可以以 TGenData 的方式来访问 bGenData 的内容。
  • 第二行PBYTE buffngd = (BYTE*)&pGenData;

    • 含义:这行代码将 pGenData 指针本身的地址转换为一个 BYTE* 类型的指针,并赋值给 buffngd
    • PBYTE 一般定义为 unsigned char*BYTE*,表示一个字节指针。
    • &pGenData 取的是指针 pGenData 的地址,而不是 pGenData 所指向的数据的地址。
    • 这意味着 buffngd 指向的是 pGenData 本身在内存中的位置,而不是 bGenData 的数据。

2. 第二段代码

BYTE* pData = &(m_pRxdFm_JC103->bData);
  • 含义:这行代码将 m_pRxdFm_JC103 对象中的 bData 成员的地址赋值给 pData
  • & 操作符用于获取 bData 成员的地址。
  • pData 是一个指向 BYTE 类型(通常是 unsigned charchar)的指针,它直接指向 bData 所指向的数据。

区别

  1. 指针指向的内容

    • 第一段代码buffngd 指向的是 pGenData 本身的地址,是一个指针的地址。
    • 第二段代码pData 指向的是 bData 的内容地址,直接操作数据。
  2. 指针的用法

    • 第一段代码:这种用法一般用于调试或特殊情况,需要知道指针本身的内存地址。
    • 第二段代码:更常见的用法,用于直接访问或操作特定的数据内容。
  3. 访问方式

    • 第一段代码:如果要通过 buffngd 访问 pGenData 指向的内容,需要先解引用 buffngd,然后再间接访问。
    • 第二段代码pData 可以直接用于访问或操作 bData

总结来说,第一段代码主要是在处理指针的地址本身,而第二段代码则是处理数据的内容,通常在实际的编程场景中,第二种方式更为常见和实用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fruit_Caller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值