使用指针更新结构中的2d整数数组

时间:2017-09-23 05:38:22

标签: c arrays pointers struct

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

我有一个结构

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

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

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

如果在比赛期间,我想将玩家的坐标更新为位置[1,2]。

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

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

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

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;

答案 1 :(得分:0)

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];

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

像array [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)

普罗斯特!