C++ 指向结构中的数组的指针,每个字段都是dinamic数组

C++ 指向结构中的数组的指针,每个字段都是dinamic数组,c++,arrays,pointers,structure,dynamic-memory-allocation,C++,Arrays,Pointers,Structure,Dynamic Memory Allocation,我试图填充包含在另一个结构中的结构中的数组的字段 以下是结构定义: struct Team { std::string name; int position; int **matches; }; struct Championship { Team *teams; unsigned int size; }; 然后,我在函数中分配内存 Championship *createChampions(unsigned int n) { int i;

我试图填充包含在另一个结构中的结构中的数组的字段

以下是结构定义:

struct Team
{
    std::string name;
    int position;
    int **matches;
};
struct Championship
{
    Team *teams;
    unsigned int size;
};
然后,我在函数中分配内存

Championship *createChampions(unsigned int n)
{
    int i;
    Championship *ptrcamp;
    ptrcamp = new Championship;
    ptrcamp -> size;
    ptrcamp -> teams = new Team [n];
    ptrcamp -> teams -> name;
    ptrcamp -> teams -> position;
    ptrcamp -> teams -> matches = new int *[2];
    for (i = 0; i < 2; i++)
    {
        ptrcamp -> equipos -> partidos[i] = new int [n - 1];
    }
    return ptrcamp;
}`
我尝试了所有的方法,事实是使用传统的*var[n]表示法是不允许的。相反,我可以使用*(var+n)

谢谢大家的帮助。

“匹配”是一个字段,本身不是变量。您需要在它前面加上点或箭头符号。在您的代码中,看起来好像您认为您正在这样做,但实际上并非如此;我和编译器看那行代码一样困惑

你的意思可能是:

       *(*( ptrcamp.teams[i].matches + k) + j) = -1;

如果我是你,我会简化这一行(并给变量明确的名称),以便在取消引用之前更清楚地说明你真正指的是什么。仅此一点就可以解决您的问题。

请停止使用原始指针。使用
std::vector
std::array
来代替(如果你真的需要指针,还可以使用智能指针)还有为什么你不能使用
匹配[k][j]
?除了正确的东西,
std::vector
之外,你已经尝试了一切。你需要一本像样的介绍书。@UnholySheep我不知道。他们说w不能用那个符号。所以,据我所知,点不能用在指针上。在我的代码中,这是为什么?我应该如何使用箭头操作符?我很困惑,这对我来说是个新概念。这里的点不在指针上。成员“teams”作为数组进行访问。ptrcamp.teams[i]是该数组中类型为Team的第i个元素
> Campeonato.cpp(52): error : identifier "matches" is undefined
1>                  ptrcamp.teams[i].*(*(matches + k) + j) = -1;
       *(*( ptrcamp.teams[i].matches + k) + j) = -1;