【问题标题】:function pointer that takes and returns a pointer [duplicate]接受并返回指针的函数指针[重复]
【发布时间】:2018-11-04 06:52:38
【问题描述】:

我正在尝试让这段代码运行..

#include <stdio.h> 

int *myMethod(int *a) 
{ 
   printf("Hello");
   return a; 
} 

int main() 
{ 
    // my_ptr is a pointer to function myMethod() 
    int *my_ptr(int *) = myMethod; 

    // Invoking myMethod() using my_ptr 

    int a = 5;
    int *p = (*my_ptr)(&a); 
    printf("Bye %d\n", *p);

    return 0; 
} 

我认为我的函数指针 my_ptr 的语法是正确的,它可以将 int 指针作为参数并返回一个 int 指针,但是当我编译它时,我收到以下错误:

 error: function 'my_ptr' is initialized like a variable
 int *my_ptr(int *) = myMethod; 

有人可以解释错误/问题吗?谢谢!

【问题讨论】:

  • 开始更简单,使用返回和获取整数的函数,而不是指针,你会发现问题出在哪里。

标签: c pointers


【解决方案1】:

int* my_ptr(int*) 是函数的原型。你想要一个函数指针:int* (*my_ptr)(int*)

【讨论】:

    【解决方案2】:

    将指向函数 myMethod 的指针更改为:

    int *(*my_ptr)(int *) = &myMethod;
    

    【讨论】:

      【解决方案3】:

      你应该使用int *(*my_ptr)(int *) = myMethod; 而不是int *my_ptr(int *) = myMethod;

      以下code 可以工作:

      #include <stdio.h>
      
      int *myMethod(int *a)
      {
         printf("Hello");
         return a;
      }
      
      int main()
      {
          int *(*my_ptr)(int *) = myMethod;
      
          int a = 5;
          int *p = (*my_ptr)(&a);
          printf("Bye %d\n", *p);
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多