我从这里得到了以下代码: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);
}
最佳答案
pno
是一个指向 struct client_t
的类型定义。
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
来隐藏指针 - 它会降低代码的可读性。
But how does the additional *pno work, what is it doing?
附加*pno
将附加标识符pno
定义为struct client_t *
类型的typedef。
Why is next never used?
因为你没有显示它的使用地点。 (?) 如果不了解上下文,就不可能回答这个问题。
Where does *self come from?
它是函数 client_t_AddClient
定义中给定参数的标识符。我相信它“来自”这段代码的作者 - 他决定将此函数的参数命名为“self”。我猜这意味着它引用当前对象,例如模仿 python 中的 self 关键字。
关于c - 理解代码: function in struct时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60048244/