[英]pointer to function in a struct in C
我需要创建一个结构,其中包含 1 个 int、2 个字符、1 个浮点数和(我写了练习中的行):“用于读取数据的函数上的两个指针void (read*)(student*st)
和一个用于显示的指针数据void (write*)(student*st)
“
我只是不明白这句话。 我知道 C 中函数指针的语法。我不明白read*
和write*
是什么。 如果它是*read
和*write
那么 in 将是指向函数的指针变量名称,而(student*st)
是参数,指向结构的指针。
此外,在练习中似乎该程序是关于 ANSI C 的,但它要求我使用 cin 读取学生人数并使用 new 为学生数组分配内存。
我就是这样开始的。
struct student {
int idNumber;
char name[100];
char gender[20];
float mark;
??
};
以下代码示例有什么问题? 我只添加了一个函数指针( func_print
),但代码应该是不言自明的:
#include <stdio.h>
struct student {
int idNumber;
char name[100];
char gender[20];
float mark;
void (*func_print)(struct student *);
};
void print(struct student *s)
{
printf("ID : %d\n", s->idNumber);
printf("Name : %s\n", s->name);
printf("Gender: %s\n", s->gender);
printf("Mark : %f\n", s->mark);
}
int main(int argc, char *argv[])
{
struct student foo = { 0, "John Doe", "Male", 1.0, &print};
foo.func_print(&foo);
return 0;
}
输出:
$ ./foo
ID : 0
Name : John Doe
Gender: Male
Mark : 1.000000
$
这种技术在各种 C 程序中经常使用。 (你已经添加了C标签,没有C++标签。到目前为止,其他成员写的, std::cin
和new
只是C++ 。)
Linux 设备驱动程序结构(device_driver)作为真实世界的例子:
struct device_driver {
const char *name;
struct bus_type *bus;
struct module *owner;
const char *mod_name; /* used for built-in modules */
bool suppress_bind_attrs; /* disables bind/unbind via sysfs */
enum probe_type probe_type;
const struct of_device_id *of_match_table;
const struct acpi_device_id *acpi_match_table;
int (*probe) (struct device *dev);
void (*sync_state)(struct device *dev);
int (*remove) (struct device *dev);
void (*shutdown) (struct device *dev);
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
const struct attribute_group **groups;
const struct attribute_group **dev_groups;
const struct dev_pm_ops *pm;
void (*coredump) (struct device *dev);
struct driver_private *p;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.