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

标签 c function pointers function-pointers

<分区>

我有一个指向返回 const char 指针的函数的指针。我的问题是如何打印指针,然后打印指针引用的对象(字符串本身)。

代码如下:

#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;
}

我得到一个 ISO C forbids conversion of function pointer to object pointer type 或一些未定义的行为。

编辑:

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

    unsigned char *p = (unsigned char *)&fp;
    /*print statements here*/
    printf("The: %p\n",(char *) p);


    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 打印函数指针是 undefined behaviour .

如果你真的需要打印函数指针,那么将它转换成一个字符指针并打印它们:

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

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

之所以可行,是因为允许将任何对象转换为字符指针(char*unsigned char*signed char*)。它打印的内容采用实现定义的格式(就像 %p)。

关于c - 如何在 C 中打印函数指针的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34250970/

相关文章:

c - 递归查找数组的最大元素

c - 如何在 void* 中存储 int 指针?

c++ - C/C++ 中的指针实际上是如何存储地址的?

go - 指针值在结构方法中更改后设置为零

创建进程和匿名管道

c - 如何使用 -D 选项将参数中的字符串化宏传递给 gcc

c - 相同的源代码,但不同操作系统上的结果不同

javascript - 在 Javascript 中使用 "Exports."?

javascript - TodoMVC 上的 Backbone.js View : function and it's argument and how does it works

javascript - 仅允许 Javascript 函数在前一个函数完成后运行