结构的指针和数组

Pointers and Arrays of Structs

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

我知道这是一个常见的问题,但我仍然设法找到解决方案。

我创建了一个名为 location 的结构路径数组 路径location[numLevels*levelSize];

我还使用了一堆称为 start 的路径。

问题是将数组中的正确位置转移到函数中,让它创建一个新路径来放入数组,而不是将其发回。

bool moveLocationStack(const vector <vector<path> > &spaceStation,const int x,const int y,path   *square){
char c=spaceStation.at(y).at(x).type;
if(c!='#'){
    if(!spaceStation.at(y).at(x).visit and !spaceStation.at(y).at(x).inPath)
        square->type=spaceStation.at(y).at(x).type;
        square->type=spaceStation.at(y).at(x).visit;
        square->type=spaceStation.at(y).at(x).inPath;
        square->type=spaceStation.at(y).at(x).level;
        return 1;
    }
return 0;
}

指针方块应指向函数调用发送给它的数组的下一个位置我努力成为:

  if(moveLocationStack(spaceStation,possibleX,possibleY,location[currentLocation])){
    }

发送我想要指向的特定数组部分时存在问题,该数组部分由代码 currentLocation 中其他地方的变量索引。如果我只写位置,它可以工作,但我很确定它不会指向数组中的下一个可用空间,每次调用它时,即使我增加当前位置。

有什么方法可以解释这一点,以便我理解错误吗?

疯狂地我不明白这个问题,但我可以看到这是错误的

if(moveLocationStack(spaceStation,possibleX,possibleY,location[currentLocation])){

你是说

if(moveLocationStack(spaceStation,possibleX,possibleY,&location[currentLocation])){

您正在向moveLocationStack传递地址,因此您应该使用&location[currentLocation]而不是location[currentLocation]

似乎这是错误的

    square->type=spaceStation.at(y).at(x).type;
    square->type=spaceStation.at(y).at(x).visit;
    square->type=spaceStation.at(y).at(x).inPath;
    square->type=spaceStation.at(y).at(x).level;

你肯定是这个意思

    square->type=spaceStation.at(y).at(x).type;
    square->visit=spaceStation.at(y).at(x).visit;
    square->inPath=spaceStation.at(y).at(x).inPath;
    square->level=spaceStation.at(y).at(x).level;

或者也许(假设square是一个path*)这个

    *square = spaceStation.at(y).at(x);

您可以一次性复制结构,而不必单独复制结构中的每个项目。