繁体   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