c语言 - 使用指针更新结构中的二维整数数组



我正在尝试为游戏中的玩家实现坐标系。

我有一个结构

typedef struct player {
int playerPosition[1][5];
}

我创建一个指向该结构的指针

struct* player playerPtr;
struct player playerOne;
playerPtr = &playerOne;

如果在游戏过程中,我想将玩家的坐标更新为位置 [1,2]。

使用playerPtr->playerPosition=[1][2]时出现错误;

正确的方法是什么?

如前所述,您可以这样做:

playerPtr->playerPosition[0][2] = 100;

但可能你在这里有一个错误:

int playerPosition[1][5];

因为拥有大小为 1 的数组很少有意义。 你真的想让playerPosition成为一个 1x5 的整数数组吗? 看起来你想要这样的东西:

struct position {
int x, y;
};
struct player {
position playerPosition;
};

然后你会这样做:

playerPtr->playerPosition.x = 1;
playerPtr->playerPosition.y = 2;

playerPtr->playerPosition=[1][2];会给你错误(语法错误)

您没有指定要存储数据的数组索引,也不能以这种方式在C中存储数据。

正确的方法是:

playerPtr->playerPosition[0][0] = 1;
playerPtr->playerPosition[0][1] = 2;
.
.
.
playerPtr->playerPosition[9][0] = 19;
playerPtr->playerPosition[9][1] = 20;

如果您像这样声明数组,则有效:

int playerPosition[10][2];

这将允许您存储十个坐标。

2数组(如数组[1][10])与数组[10]相同(对于用法,我不确定内存分配,2D数组可能需要更多内存)

我认为您可以使用不同但更简单的方法来解决此问题:

typedef struct position{
int x, y;
float refpos; //position from some reference point (like healing circle)
}position;
typedef struct player{
char name[20];
int health, attack, defense; //can be float too
position coord[20];
}player;
player player1, *playerPtr;
playerPtr = &player1;
playerPtr->position[0].x = 3;
playerPtr->position[0].y = 4;
playerPtr->position[0].refpos = 5; //Pythagorean triplet wrt origin (0,0)

普罗斯特!

最新更新