stdlib.h中的_PTR_LD()用于什么?

时间:2015-06-11 02:56:29

标签: c++

我在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 [错误]基本操作数&#39; - &gt;&#39;有非指针类型&#39; Thing&#39;

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

1 个答案:

答案 0 :(得分:0)

字面意思是将一个表达式计算为指针//so the center tag you may change to another tag var td = $('#student tr').find('center'), arr = {}; td.each( function() { var label = $(this).find('i').text(); var val = $(this).find("input[type='text']").val(); arr[label] = val; }); ,并返回指向x的指针,并重新解释为x->ld

您正在执行的操作无法编译,因为unsigned char*的优先级高于->,因此您的代码评估为&,这是无效的。如果您改为打印以下内容:

&(x->ld)

然后你会看到x.ld = 'a'; std::cout << ( _PTR_LD(&x)) << std::endl; 被打印,因为你将a重新解释为C字符串,并且该内存看起来像字符串&(x.ld)

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