我在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()?
答案 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)
。
至于为什么这个宏存在,我不知道。有关系吗?它是一个保留的内部使用宏。