1

我正在尝试使用指针算法在结构中引用一个结构(也是一个数组),

结构如下:

struct Team
{
    int name;
    int **games;
};

struct Championship
{
    Team *teams;
    unsigned int size;
};

Championship *c;
c= new Championship;
c->teams= new Team[2];

我尝试使用 [] 来引用数组的位置,它的工作原理如下:

int i=0;(Just as an example)
c->teams[i].name;

它甚至适用于 Team 结构中的矩阵:

c->teams[i].games[i][i];

但我不知道如何使用指针算术来实现这一点,因为做了类似的事情:

c->(teams+i);

给我一个错误说:

error: expected unqualified-id before '(' token
error: 'teams' was not declared in this scope

我应该如何对这个结构使用指针算法?

4

2 回答 2

1

c->teams是指向数组第一个元素的指针。如果您想要ith 元素,请执行以下任一操作:

(c->teams)[i]
*(c->teams + i)

两者的定义完全相同。

于 2019-09-01T17:02:34.867 回答
0

您将其标记为 C++,所以不要使用原始指针。使用适当的 C++ 库:

struct Team {
  ..
};

struct Championship {
  std::vector<Team> teams;
};

通过适当的分配和释放,这更安全、更短。在实践中,与使用原始指针相比,它在所有方面都是最好的。

您的代码在所有方面都需要更加谨慎,它缺少内存分配和释放(应该在构造函数中完成,而不是像您正在做的那样),它基本上是 C 代码。

如果您需要共享指针,那么您可以使用std::unique_ptr<T>单一所有权或std::shared_ptr<T>根据需要。

于 2019-09-01T17:25:09.490 回答