使用带有联合,数组和函数的指针

时间:2012-03-22 09:29:46

标签: c arrays pointers

我无法完全理解在函数中传递指针以及如何使用它们的背景中发生了什么。现在我在c编码微处理器。主要目标是创建一个使用accelormeter的蛇型游戏。不用说我的代码充满了处理指针植入的错误。

让我试着把它分解。首先,我有一个工会

    typedef union
{
    UINT8       byte;

    struct
    {
        UINT8   x  : 4;
        UINT8   y  : 4;
    };

} snake;

union将节点的x和y位置存储在snake中。我使用这种方法,所以当我检查字节是否存在时,我可以使用该字节来完成。无论如何我把它初始化为一个数组“蛇位[64]”,它在主函数中。我也有蛇的长度和头部和尾部的int。然而,试图通过工会或其他任何东西是我有问题的地方。到目前为止,我的功能原型是

void randGen(UINT8* x, UINT8* y);
void nextMove(snake* body, int* length, int* head, int* tail);
BOOL setLocation(snake* body,snake temp, int* length, int* head, int*tail, BOOL* newTerm);
void clearLocation(snake* body,snake temp, int* length, int* tail, BOOL* repeat);
void reset(int* length, int* index, UINT8* location);
UINT8 readDirection();
void gameOver();

这是nextMove函数的一个snippit。我几乎只是拥有更多或更少相同代码的if语句,以保持简单。

void nextMove(snake* body[], int* length, int* head, int* tail){
    UINT8 direction;
    int i;
    snake temp;
    temp = *body[*head];
    do {
    direction = readDirection();
    } while(direction != 4);
    if(direction == 0) { //up
        if(temp.y == 0) gameOver();
        temp.y -= 1;
        for(i = 0; i < *length; i++) {
            if (body[i]->byte == temp.byte) gameOver();
        }
        if(temp.byte == locOfApple.byte) {

        }
        else {
            clearLocation(body, *temp, length, tail, FALSE);
            setLocation(body, *temp, length,head,tail, FALSE);
            *body[*tail] = temp;
            head = tail;
            if(++tail >= length) tail = 0;

        }

    }

大多数情况下,我只需要知道如何设置原型,如何将指针用作函数中的值,以及传递函数的内容。如果传递一个数组(我相信它不同于传递一个int)是不同的,如果有人可以解释一个好的思考方式,那将真正帮助我掌握这个概念。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

void nextMove(snake* body[], int* length, int* head, int* tail) 

应该像这样写

void nextMove(snake* body, int* length, int* head, int* tail) 

void nextMove(snake body[], int* length, int* head, int* tail)

答案 1 :(得分:0)

我明白了。我需要像

那样设置联合
typedef union
{
    UINT8       byte[64];

    struct
    {
        UINT8   x  : 4;
        UINT8   y  : 4;
    }cord[64];

}body;

这允许我将它作为数组传递并查看所有值。