如何创建和调用指向函数的指针

时间:2011-11-07 17:27:08

标签: c function function-pointers

嗨,我是初学者,我正在尝试找出一些指向函数示例的指针。我甚至无法编译我的代码,它显示以下消息。我无法确定为什么会收到编译错误。

/tmp/cc0qghbo.o: In function `main':
pointer_to_function_inside_structure.c:(.text+0x88): undefined reference to `func_ptr'
collect2: ld returned 1 exit status

这是我的代码,请告诉我我做错了什么

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

struct student_data
{
        char *name;
        int roll_num;
        int marks;
        void (* func_ptr)(struct student_data *ptr);
};

void print_data(struct student_data *ptr);

void print_data(struct student_data *ptr)
{
        printf("\nNAME OF THE STUDENT      %s", ptr -> name);
        printf("\nROLL NUMBER OF STUDENT   %d", ptr -> roll_num);
        printf("\nMARKS OF STUDENT         %d\n", ptr -> marks);
}

int main()
{
        struct student_data *ptr;

        ptr -> name = "ajish";
        ptr -> roll_num = 2;
        ptr -> marks = 50;

        ptr -> func_ptr = &print_data;
        func_ptr(ptr);
}

2 个答案:

答案 0 :(得分:5)

  1. 您没有使用指针分配内存。
  2. 由于func_ptrstudent_data的成员,您必须使用struct student_data *ptr来调用您的函数,int main() { // allocate memory struct student_data *ptr = malloc(sizeof(student_data)); ptr -> name = "ajish"; ptr -> roll_num = 2; ptr -> marks = 50; ptr -> func_ptr = &print_data; // change this to: ptr->func_ptr(ptr); // free memory free(ptr); } 应该是指向结构实例的指针。
  3. 示例:

    {{1}}

答案 1 :(得分:2)

您需要更改main()结束括号之前的最后一行

func_ptr(ptr);

ptr -> func_ptr(ptr);

在更改之后,程序编译并为我运行。我用gcc 4.5.0编译。

你也应该

  1. 在堆上为ptr分配空间

    struct student_data *ptr = malloc(sizeof(struct student_data));
    

    不要忘记在程序结束时释放它:

    free(ptr);
    

  2. 在堆栈上声明ptr

    struct student_data ptr;
    

    这将要求您将->的所有ptr运营商更改为.运营商。