使用指针算法调用结构内的结构数组

Calling an array of structures inside a structure using pointer arithmetic

本文关键字:结构 数组 调用 指针 算法      更新时间:2023-10-16

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

结构如下:

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;

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

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

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

c->(teams+i);

给我一个错误说:

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

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

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

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

根据定义,两者完全相同。

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

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

这更安全,更短,具有适当的分配和分配。实际上,与使用原始指针相比,它在各个方面都是最好的。

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

如果需要共享指针,则可以根据需要将std::unique_ptr<T>用于单个所有权或std::shared_ptr<T>