将函数指针作为参数传递时出错

时间:2016-11-16 14:34:06

标签: c pointers shared-libraries function-pointers

我有一个程序可以调用库中的函数。函数的参数是函数指针。

Helloworld.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "helloworld.h"

struct data_buffer
   {
        char name[10];
   }data;

int main()
  {
     int result; 

     int (*func_pointer)(&data_buffer); //function pointer which takes structure as parameter

      result=send_data(func_ponter); //error

      func_pointer(&data_buffer);  //call the SPI write

  }

helloworld.h

#ifndef HELLOWORLD_H
#define HELLOWORLD_H

/* Some cross-platform definitions generated by autotools */
#if HAVE_CONFIG_H
#  include <config.h>
#endif /* HAVE_CONFIG_H */
/*
 * Example function
 */

struct data_buffer;

extern int send_data(int (*func_pointer)(&data_buffer)); //is the declaration correct

#endif 

libexample.c

#include<stdio.h>
#include<stdlib.h>


int send_data(int (*func_pointer)(&data_buffer)) //error 
{

func_pointer=spi_write();  // assigning the function pointer to SPI WRITE function
return;
}

所以我的项目目标是发送一个函数指针作为send_data函数的参数。在库程序中,函数指针必须分配给spi_write()函数,然后可以借助Helloworld程序中的函数指针调用SPI_Write。

1 个答案:

答案 0 :(得分:0)

extern int send_data(int (*func_pointer)(&data_buffer)); //is the declaration correct

函数的参数必须是类型。类型使用*来表示它是一个指针。所以&data_buffer在声明中是不正确的。

另请注意,在C中,与C ++不同,结构名称不是类型,您需要将其与关键字struct(或使用typedef)组合。所以使用:

extern int send_data(int (*func_pointer)(struct data_buffer *));