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

aji*_*red 2 c function-pointers function

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

/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
Run Code Online (Sandbox Code Playgroud)

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

#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);
}
Run Code Online (Sandbox Code Playgroud)

cpx*_*cpx 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);
}
Run Code Online (Sandbox Code Playgroud)