如何在C中打印函数指针的值?

如何在C中打印函数指针的值?,c,function,pointers,function-pointers,C,Function,Pointers,Function Pointers,我有一个指向返回常量字符指针的函数的指针。我的问题是如何打印指针以及指针引用的对象(字符串本身) 代码如下: #include <stdio.h> char const *func(void) { printf("Printed func string.\n"); return "Pointed func string.\n"; } int main(void) { char const *(*fp)(void) = func; /*print

我有一个指向返回常量字符指针的函数的指针。我的问题是如何打印指针以及指针引用的对象(字符串本身)

代码如下:

#include <stdio.h>

char const *func(void)
{
    printf("Printed func string.\n");
    return "Pointed func string.\n";
}

int main(void) {
    char const *(*fp)(void) = func;

    /*print statements here*/

    return 0;
}
输出:
0x7fff36753500

这是不对的

char const *(*fp)(void) = func;
这里,您仅将
func
赋值给函数指针。您需要调用它来获取函数返回的字符串

   char const *(*fp)(void) = func;

   const char *p = fp();
   printf("In main: %s", p);
这就是打印字符串的方式。没有用于打印函数指针的标准格式说明符<代码>%p仅用于数据指针,不用于函数指针。因此,使用
%p
打印函数指针是非常困难的

如果确实需要打印函数指针,请将其转换为字符指针并打印:

   unsigned char *cp = (unsigned char*)&fp;

   for(i=0;i<sizeof fp; i++) {
      printf("[%08x]", cp[i]);
   }
unsigned char*cp=(unsigned char*)&fp;

对于(i=0),将函数指针指向char指针,取消引用,使用unChar char。在Linux上,您可以考虑<代码> dLADDR < /Cord>得到名称,给定全局函数的地址,然后将其转换为字符指针“是误导的。因为您的代码做了一些不同的事情。
   unsigned char *cp = (unsigned char*)&fp;

   for(i=0;i<sizeof fp; i++) {
      printf("[%08x]", cp[i]);
   }