【问题标题】:c++ *(Type*) property namec++ *(Type*) 属性名
【发布时间】:2021-10-28 07:28:05
【问题描述】:
void* SendMsg(void* msg) {
    char *result;
    char tmpBuf[1000]={0};
    message send_msg =*(message*)msg;//?

问题是 * 和 (*) 类型。

(消息)"参数名称";

“消息”是定制的结构。 我知道“parameterName*”是指针,接收地址。但是“*(参数)”短语从地址中获取值。我该怎么称呼它?

【问题讨论】:

  • =* 之间留一个空格,以纪念史前 C 运算符 =*、=+ 等。
  • 我会说declare a new variable called send_msg of type message and initialize it with msg, cast to message star dereferenced
  • 在数据流(文件或网络)中,数据通常被序列化为字节(在 C 中使用char)。然后发送类型擦除指针 (void*) 和长度。要将此类指针转换回此处的原始类型,首先将其转换为该类型的指针message*,然后使用*-操作符取消引用。
  • (message*)msg 是从void* 类型到message* 类型的转换(指向消息的指针)。然后:* 是访问运算符 - 它使您可以访问指针指向的值。也看看here
  • 所以这等于 "*message (parameter)" 对吗?

标签: c++ ampersand


【解决方案1】:

代码是 C 风格的,其中一个 void 指针被传递给函数。为了使用它,它以 C 风格转换为 message* 并立即取消引用(在这种情况下分配给名为 send_msg 的局部变量)。

C++ 中的这段代码在技术上被称为可能出现问题的红鲱鱼。

在 C++ 中,我希望基类(接口)作为参数或模板参数。

【讨论】:

  • so ,这与“*消息参数”的含义相同。我说的对吗?
  • 是的,如果参数作为message* param 传递,那么message send_msg = *param; 将是相同的。当然,如果void* 没有真正指向“消息”结构,则问题中的代码可能会出错。
【解决方案2】:

(message*)msg 说“假设msg 是指向message 类型对象的指针。message send_msg = *(message*)msg; 说“假设msg 是指向message 类型对象的指针并复制@它指向的987654327@对象进入send_msg。如果msg 实际上指向message 类型的对象,那将正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多