我从这里得到以下代码: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);
}
[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
关键字。