簡體   English   中英

指針指向 function 的結構

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM