【问题标题】:Modifying and returning a struct in a function在函数中修改和返回结构
【发布时间】:2020-01-30 02:06:13
【问题描述】:

我正在创建一个游戏,它创建一个带有绳索的 2d 地图,每条绳索都是一个房间。所以我正在创建一个从绳索 (0,0) 开始的玩家,这是我游戏中的房间 1。我正在尝试归还持有绳索的播放器,这就是我的问题所在。返回类型“struct PC *”但预期为“struct PC”时,我得到了不兼容的类型。

世界是我的 2d 地图,每个房间都有绳索,绳索是玩家的绳索。

struct PC
{
   int respect;
   int x;
   int y;

};

void createRooms(struct room AllRooms[])
{
   int MaxRooms = 9;
   int number = 1;
for(int i = 0;i < MaxRooms; i++)
{
    AllRooms[i].roomNum = number;
    number++;
}
for(int i = 0;i < MaxRooms; i++)
{
    printf("%d",AllRooms[i].roomNum);
}

}

void createWorld(struct room AllRooms[], int rows, int cols, struct room World[rows][cols])
{
  int counter = 0;
  for(int i = 0; i <= rows;i++)
  {
    for(int j = 0; j <= cols; j++)
    {
        World[i][j] = AllRooms[counter];
        counter++;
        printf("\nWorld %d", World[i][j].roomNum);
    }

  }

}

struct PC startPointPC(struct PC* player,int rows, int cols, struct room* World[rows][cols],struct PC* cords[rows][cols])
{

   int x = 0;
   int y = 0;

   player->x = x;
   player->y = y;

   cords[x][y] = player;
   printf("\nYou are starting in Room %d",World[x][y]->roomNum);

   return player;

}

int main()
{
   int MaxRooms = 9;
    int rows = 2;
    int cols = 2;
    //creaste each room
    struct room Room1;
    struct room Room2;
    struct room Room3;
    struct room Room4;
    struct room Room5;
    struct room Room6;
    struct room Room7;
    struct room Room8;
    struct room Room9;
    struct PC player;
    player.respect = 40;

     //Store them into a array
     struct room AllRooms[MaxRooms];
     AllRooms[0] = Room1;
     AllRooms[1] = Room2;
     AllRooms[2] = Room3;
     AllRooms[3] = Room4;
     AllRooms[4] = Room5;
     AllRooms[5] = Room6;
     AllRooms[6] = Room7;
     AllRooms[7] = Room8;
     AllRooms[8] = Room9;

    //allrooms has all the 9 rooms in the array
   createRooms(AllRooms);

   struct PC player;
   struct room World[rows][cols];
   struct PC cords[rows][cols];

   player = startPointPC(&player,rows,cols,&World,&cords);

}

【问题讨论】:

  • 为什么需要退回播放器?您传递了一个指针并对其进行了适当的修改。但是如果你真的想做,你需要return *player;
  • 好的,谢谢,但是当我去打印电线时,它不会打印任何东西,但我没有收到任何错误。
  • 您分配的是cords[x][y],但打印的是World[x][y]
  • 另外,cords 被声明为 struct PC 的数组,但您正试图为该元素分配一个指针。
  • 应该是struct PC *cords[rows][cols]。并且在将数组传递给函数时不需要使用&amp;,它会自动转换为指针。

标签: c


【解决方案1】:

cords 应该是指针数组,而不是结构数组。 World也一样。

没有必要从startPointPC 返回任何东西,因为它修改了适当的结构。

将数组传递给函数时不要使用&amp;。数组用作函数参数时会自动转换为指针。

您的代码正在打印World[x][y] 的内容,但从未初始化它。但是struct room 代码都没有出现在问题中,我假设您只是为了简化而忽略了它。

void startPointPC(struct PC* player,int rows, int cols, struct room* World[rows][cols],struct PC* cords[rows][cols])
{

   int x = 0;
   int y = 0;

   player->x = x;
   player->y = y;

   cords[x][y] = player;
   printf("\nYou are starting in Room %d",World[x][y]->roomNum);
}

int main()
{
   struct PC player;
   struct room *World[rows][cols];
   struct PC *cords[rows][cols];

   startPointPC(&player,rows,cols,World,cords);
}

【讨论】:

  • 好的,谢谢,我添加了其他功能,因为我认为我的 createWorld 功能有问题,因为即使您更改了它也不会打印 World 的内容
  • 我假设我可能必须为 World 使用 Struct 房间指针,因为我正在初始化它?
  • 其他的东西和你上一个问题stackoverflow.com/questions/59977531/…不一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多