[英]Struct with pointer to function
您能否詳細解釋結構中的這一行代碼:有一個指向 function 的指針,但為什么要將它引用到結構中?
void (*function)(struct Structure *);
這是什么意思
(struct Structure *)?
(struct Structure *)
這意味着 function 有一個struct Structure *
參數。 實際上,使用(struct Structure *variable of struct)
會更有意義。 這樣就可以用一個指針指向一個struct,應該把struct變量的地址放到function中。
#include <stdio.h>
typedef struct circle{
int rad;
int area;
} Circle;
void ShowCircleInfo(Circle *info)
{
printf("rad value: %d\n", info->rad);
printf("area value: %d", info->area);
}
int main(void)
{
Circle circle_one;
circle_one.rad = 2;
circle_one.area = 3;
ShowCircleInfo(&circle_one);
return 0;
}
void (*function)(struct Structure *);
將function
聲明為指向 function 的指針,該指針具有struct Structure *
類型的參數並且不返回值。
例如
#include <stdio.h>
struct Structure {
int a;
void (*function)(struct Structure *);
};
void foo(struct Structure *a) {
if (a->function == NULL) a->function = foo;
a->a++;
printf("%d\n", a->a);
}
int main(void) {
struct Structure a = {42, foo};
struct Structure b = {0}; // don't call b.function just yet!!
a.function(&b); // foo(&b)
b.function(&a); // foo(&a)
}
查看運行在https://ideone.com/7E74gb的代碼
在C、function指針聲明中,與function頭的結構幾乎相同。 只有 function 名稱會更改為包含一些括號和“*”,而 arguments 不會有名稱,因為在使用指針時只有它們的類型很重要(我們不訪問 arguments 的值,所以我們不需要他們的名字)。
它們基本上是這樣的:
<return_value> (*<function_name>)(<argument_list>)
因此,例如 function 指針為 function
void swap(int* a, int* b);
將是
void (*swap_ptr)(int*, int*);
請注意,指針的名稱位於 function 的名稱位置,與普通指針聲明相比看起來有點奇怪。
關於這個主題的優秀讀物(你可以跳過 C++ 的東西): https://www.cprogramming.com/tutorial/function-pointers.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.