嗨,我是初学者,我正在尝试找出一些指向函数示例的指针。我甚至无法编译我的代码,它显示以下消息。我无法确定为什么会收到编译错误。
/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);
}
答案 0 :(得分:5)
func_ptr
是student_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);
}
应该是指向结构实例的指针。示例:
{{1}}
答案 1 :(得分:2)
您需要更改main()
结束括号之前的最后一行
func_ptr(ptr);
到
ptr -> func_ptr(ptr);
在更改之后,程序编译并为我运行。我用gcc 4.5.0编译。
你也应该
在堆上为ptr
分配空间
struct student_data *ptr = malloc(sizeof(struct student_data));
不要忘记在程序结束时释放它:
free(ptr);
或
在堆栈上声明ptr
。
struct student_data ptr;
这将要求您将->
的所有ptr
运营商更改为.
运营商。