你能詳細解釋一下struct里面的這行代碼嗎:有一個指向函式的指標,但你為什么要把它參考到struct?
void (*function)(struct Structure *);
這是什么意思
(struct Structure *)?
uj5u.com熱心網友回復:
void (*function)(struct Structure *);
宣告function
為指向具有型別引數struct Structure *
且不回傳值的函式的指標。
uj5u.com熱心網友回復:
例如
#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的代碼
uj5u.com熱心網友回復:
(struct Structure *)
這意味著該函式有一個struct Structure *
引數。實際上它會更有意義(struct Structure *variable of struct)
。這樣,你可以使用一個指標來指向一個結構體,并且應該把可以在函式中使用的結構體變數的地址。
#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;
}
uj5u.com熱心網友回復:
在 C 中,函式指標宣告與函式頭具有幾乎相同的結構。只有函式名稱會更改為包含一些括號和“*”,并且引數不會有名稱,因為在使用指標時只有它們的型別是重要的(我們不訪問引數的值,所以我們不需要他們的名字)。
它們基本上看起來像這樣:
<return_value> (*<function_name>)(<argument_list>)
因此,例如,函式的函式指標
void swap(int* a, int* b);
將會
void (*swap_ptr)(int*, int*);
請注意,指標的名稱代替了函式的名稱,與普通的指標宣告相比看起來有點奇怪。
關于這個主題的優秀讀物(你可以跳過 C 的東西):https ://www.cprogramming.com/tutorial/function-pointers.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/469331.html
下一篇:洗掉陣列指標時我的程式不回傳0