月影梦 发表于 2022-12-8 00:29:09

c++的输出对于函数指针的指针名的识别定义

int add()
{
return 0;
}


int main()
{
    int (*func)(void);
    func=add;
   cout<<func<<endl;
    return 0;
}

为什么打印出的数据不是func的地址而是数字1

zhangjinxuan 发表于 2022-12-8 07:59:46

本帖最后由 zhangjinxuan 于 2022-12-8 08:05 编辑

不要用cout,不仅慢,很多的类型他都不认识,就比如函数指针,cout 不认识,就只能随便输出,当然我也不知道为什么会输出 1,可能是对它进行强制转换得到的结果吧

毕竟,你给 cout 一个函数指针,他也不知道到底是打印它的地址还是打印它的返回值,printf 就解决了这一问题,使用格式符就可以告诉编译器这个变量要怎么输出

用 printf 吧:
#include <bits/stdc++.h>
using namespace std;


int add()
{
return 0;
}


int main()
{
    int (*func)(void);
    func=add;
    printf("%p", func);
    return 0;
}

jhq999 发表于 2022-12-8 08:51:25

本帖最后由 jhq999 于 2022-12-8 08:56 编辑

cout<<hex<<int(add)<<endl;
更多就了解一下#include<iomanip>
例如里面的setw,setfill等等

xiaotubie 发表于 2022-12-8 10:06:48

operator <<没有重载函数指针,   有重载一个bool类型的参数,函数指针转换成bool类型的时候就变成了 1 。
页: [1]
查看完整版本: c++的输出对于函数指针的指针名的识别定义