【问题标题】:What is _PTR_LD() in stdlib.h used for?stdlib.h 中的 _PTR_LD() 是做什么用的?
【发布时间】:2015-06-11 02:56:29
【问题描述】:

我正在查看 Dev-Cpp 的包含文件中的 stdlib.h,我发现了某行:

#define _PTR_LD(x) ((unsigned char  *)(&(x)->ld))

然后我尝试在程序中使用 _PTR_LD,如下所示:

class Thing {
public:
    Thing();
    int ld;
};

int main() {
    Thing x;
    x.ld = 8;
    cout << _PTR_LD(x) << endl;
    system("pause");
    return 0;
}

我以为它会返回 x 中属性 ld 的值,但我收到以下错误消息:

15 10 C:\Users\John\Desktop\Untitled1.cpp [错误] '->' 的基本操作数具有非指针类型'Thing'

我试图搜索 _PTR_LD() 但我一无所获。有人知道 _PTR_LD() 吗?

【问题讨论】:

  • 需要传递一个指针,操作顺序为&amp;(x-&gt;ld)。它还评估为unsigned char *,所以我将0x38 分配给x.ld

标签: c++


【解决方案1】:

它的字面意思是接受一个表达式,该表达式计算为一个指针x,并返回一个指向x-&gt;ld的指针,重新解释为unsigned char*

您正在执行的操作无法编译,因为 -&gt; 的优先级高于 &amp;,因此您的代码计算结果为 &amp;(x-&gt;ld),这是无效的。如果您改为打印以下内容:

x.ld = 'a';
std::cout << ( _PTR_LD(&x)) << std::endl;

然后您会看到打印了a,因为您将&amp;(x.ld) 重新解释为C 字符串,并且该内存恰好看起来像字符串{'a', 0}

至于为什么这个宏存在,我不知道。有关系吗?这是一个保留的内部使用宏。

【讨论】:

  • 啊,我明白了。我假设 & 符号用于 x 而不是 x->ld。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2011-08-24
  • 2023-04-03
  • 2014-03-04
  • 2012-05-19
  • 2011-10-25
  • 2015-07-17
相关资源
最近更新 更多