Мне так и не удалось полностью понять, что происходит на фоне передачи указателей на функции и как вы их используете.Прямо сейчас я кодирую микропроцессор в c.Основная цель - создать игру типа змеи, в которой используется акселерометр.Излишне говорить, что мой код заполнен ошибками, связанными с имплантацией указателя.
Позвольте мне попытаться разбить его.Сначала у меня есть объединение
typedef union
{
UINT8 byte;
struct
{
UINT8 x : 4;
UINT8 y : 4;
};
} snake;
Объединение хранит координаты x и y узла в змее.Я использую этот метод, поэтому, когда я проверяю, существует ли байт, я могу сделать это, используя байт.В любом случае я инициализирую его как массив «snake location [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.У меня в значительной степени просто больше операторов 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) отличается, если кто-то может объяснить хороший способ думать об этом, который действительно поможет мне понять эту концепцию.
Любая помощь будет оценена :)