理解代码的问题:struct中的函数

问题描述 投票:0回答:1

我从这里得到以下代码:C - function inside struct。我已经看了一个小时了,但我听不懂。从第一行开始:我知道

typedef struct client_t client_t;

但是附加的* pno是如何工作的,它在做什么?为什么从未使用next* self来自哪里?

typedef struct client_t client_t, *pno;
struct client_t
{
        pid_t pid;
        char password[TAM_MAX]; // -> 50 chars
        pno next;

        pno (*AddClient)(client_t *);    
};

pno client_t_AddClient(client_t *self) { /* code */ }

int main()
{

    client_t client;
    client.AddClient = client_t_AddClient; // probably really done in some init fn

    //code ..

    client.AddClient(&client);

}
c struct
1个回答
1
投票

[pnt是指向struct client_t的指针的typedef。

typedef struct client_t client_t, *pno;

等于:

typedef struct client_t client_t;
typedef struct client_t *pno;

因此client_t的含义与struct client_t相同,pno的含义与struct client_t *相同。让我们用您的代码代替它们。

struct client_t 
{
        pid_t pid;
        char password[TAM_MAX]; // -> 50 chars
        struct client_t *next;
        struct client_t *(*AddClient)(struct client_t *);    
};

struct client_t *client_t_AddClient(client_t *self) { /* code */ }

int main()
{

    struct client_t client;
    client.AddClient = client_t_AddClient; // probably really done in some init fn

    //code ..

    client.AddClient(&client);

}

因此struct client_t具有一个称为next的成员,该成员是struct client_t-经典链表的指针。 struct client_t *(*AddClient)(struct client_t *);是一个函数指针声明,它使用指向struct client_t的指针并返回指向struct client_t的指针-从名称判断,它将下一个客户端添加到当前项,但是我不知道它是什么返回,因为尚未解释。

我不鼓励使用typedef隐藏指针-它使您的代码不可读。

但是附加的* pno是如何工作的,它在做什么?

附加*pnt将附加标识符pno定义为struct client_t *类型的typedef。

为什么下一个永远不使用?

因为您未显示使用位置。 (?)在不知道上下文的情况下不可能回答这个问题。

*自我来自哪里?

是在函数client_t_AddClient定义中给定参数的标识符。我相信此代码的作者“来了”-他决定将此函数的参数命名为“ self”。我想这意味着它指向当前对象,例如模仿python中的self关键字。

© www.soinside.com 2019 - 2024. All rights reserved.