嗨,我看到一个如下的指针示例:
void main()
{
int a=197,*p=&a;
(int(*)())p==main;
}
我不知道(int(*)())p==main
语句做什么?
==
是比较运算符。您正在将指向main()
函数的指针与指向变量a的指针进行比较。但是您没有使用比较,例如在if
语句中,因此该行实际上没有任何作用。
如果将它分成更小的部分,我们有
(int(*)())p
==
main
[第一个是将p
强制转换为使用不确定数量的参数(在C中)或没有参数(在C ++中)的指针。
[将此指针与main
衰减到的指针进行比较。
然后丢弃布尔结果(不使用结果)。
请注意,这里的C和C ++在语义上有很大的不同。
我不知道(int(*)())p == main做什么?
int(*)()
是一种类型。它是指向返回int并且不带参数的函数的指针。
(T)expr
这是一个显式转换,即强制转换。右手表达式的结果将转换为括号中的类型。 (int(*)())expr
将右侧表达式转换为指向函数的指针。
在(int(*)())p
中,转换后的表达式为p
。 p
是类型为int的指针的变量。由于原始指针未指向函数,因此就C ++标准而言,该值是任意的。
[(int(*)())p==main
将转换后的指针与main
函数的地址进行比较。
如果有疑问,请参阅cdecl
(int(*)())p
手段
cast p into pointer to function returning int
因此
(int(*)())p==main;
正在检查p
是否转换为函数指针,并且main
具有相同的地址。