【问题标题】:difference between function pointers in c and c++ [duplicate]c和c ++中函数指针之间的区别[重复]
【发布时间】:2011-10-21 12:21:37
【问题描述】:

可能重复:
How to print function pointers with cout?

c和c++中的函数指针有什么区别?当我在 c++ 中打印函数指针时,它给出了 1,但在 c 中它给出了一个地址。

#include <iostream>

int fun()
{}

typedef int (*f)();


int main()
{
    f test = fun;
    std::cout << reinterpret_cast<f>(test);
}


#include <stdio.h>

int fun()
{}

int (*f)();

int main()
{
    f = fun;
    printf("%p", f);
}

【问题讨论】:

  • 你的 c++ 代码中的 f test = fun 是什么意思,我猜它甚至不会编译
  • @niko - 试试看,确实如此。
  • reinterpret_cast&lt;f&gt;(test); 拥抱?

标签: c++ c


【解决方案1】:

函数指针无法转换为void*,因此在使用C++ i/o 的程序中它转换为bool。 C程序也是C++程序。将其编译为 C++ 时应该没有区别。

干杯,

【讨论】:

    【解决方案2】:

    主要区别在于您使用的打印机制。 std::cout 和 printf 具有不同的语义。 std::cout 将您的指针称为布尔数据并打印 0 或 1 而不是地址。

    【讨论】:

      【解决方案3】:

      真正的问题是,当您流式传输指向函数的指针时,带有“%p”的 printf 和 cout 之间有什么区别。

      要在 C++ 中打印出指向函数的指针,请尝试将其转换为 char* 并遍历字节(长度为 sizeof(test))。我想你会发现它类似于“%p”

      【讨论】:

      • +1 聪明:我只是在想如何解决函数指针(方法)可能不适合标准指针的问题。
      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2013-05-17
      • 2011-07-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多