如何正确索引 C 中的结构指针数组?

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

这是我正在查看的代码:

void add_to_pfds(struct pollfd *pfds[], int newfd, int *fd_count, 
      int *fd_size)
{
     // If we don't have room, add more space in the pfds array
     if (*fd_count == *fd_size) {
        *fd_size *= 2; // Double it

        *pfds = realloc(*pfds, sizeof(**pfds) * (*fd_size));
     }

    (*pfds)[*fd_count].fd = newfd;
    (*pfds)[*fd_count].events = POLLIN; // Check ready-to-read

    (*fd_count)++;
}

如果这看起来很熟悉,那是因为它来自 Beej 的《网络编程指南》。

我无法理解的部分是“(*pfds)[*fd_count].fd = newfd;”。 'pfds' 是 struct pollfd 指针的数组。根据我的理解,“(*pfds)”首先取消引用数组,从而产生单个 struct pollfd 指针,即数组的第一个元素。然后我们对数组进行索引,以索引“*fd_count”。这不应该导致另一个 pollfd 指针吗?那么我们如何使用句点运算符来访问该结构的“.fd”成员呢?我们不应该使用 -> 运算符吗?

我在某处遗漏了一些东西。有人可以给我一个正确的方式来思考这个问题吗?

arrays c pointers
1个回答
0
投票

struct pollfd *pfds[]
是指向
struct pollfd
的指针。 (这是一个指针而不是数组,因为这是一个函数参数)

(*pfds)
是指向
struct pollfd
的指针。这相当于
pfds[0]

(*pfds)[*fd_count]
,相当于
pfds[0][*fd_count]
,是一个
struct pollfd
。使用点
.
运算符来访问
struct
的成员是很自然的。

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