[英]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.