如何将指针指向主要功能

问题描述 投票:-1回答:2

嗨,我看到一个如下的指针示例:

void main()
{
    int a=197,*p=&a;
    (int(*)())p==main;
} 

我不知道(int(*)())p==main语句做什么?

c++ c pointers casting int
2个回答
0
投票

==是比较运算符。您正在将指向main()函数的指针与指向变量a的指针进行比较。但是您没有使用比较,例如在if语句中,因此该行实际上没有任何作用。


0
投票

如果将它分成更小的部分,我们有

  • (int(*)())p
  • ==
  • main

[第一个是将p强制转换为使用不确定数量的参数(在C中)或没有参数(在C ++中)的指针。

[将此指针与main衰减到的指针进行比较。

然后丢弃布尔结果(不使用结果)。

请注意,这里的C和C ++在语义上有很大的不同。


0
投票

我不知道(int(*)())p == main做什么?

int(*)()是一种类型。它是指向返回int并且不带参数的函数的指针。

(T)expr这是一个显式转换,即强制转换。右手表达式的结果将转换为括号中的类型。 (int(*)())expr将右侧表达式转换为指向函数的指针。

(int(*)())p中,转换后的表达式为pp是类型为int的指针的变量。由于原始指针未指向函数,因此就C ++标准而言,该值是任意的。

[(int(*)())p==main将转换后的指针与main函数的地址进行比较。


0
投票

如果有疑问,请参阅cdecl

(int(*)())p

手段

cast p into pointer to function returning int

因此

(int(*)())p==main;

正在检查p是否转换为函数指针,并且main具有相同的地址。

© www.soinside.com 2019 - 2024. All rights reserved.