2015-06-15 2 views
-1

Я создаю экземпляр структуры в пределах функции main(), и я передаю указатель на эту структуру на функцию. Я хотел бы передать этот указатель на исходную структуру на другую функцию, как бы я это сделал?Как передать указатель на функцию struct?

Я теперь потерян в pointerception.

struct coords { 
    int x; 
    int y; 
} 

// Main loop, instantiated the struct 
int main(void) 
{ 
    struct coords myCoords; 
    while(1) { 
     doStuff(&myCoords); 
    } 
} 

// Calculate Coords and update them via pointer to struct 
// I want to be able to edit myCoords within calculateCoords 
void doStuff(struct coords* myCoords) 
{ 
    calculateCoords(&myCoords); 

    calculateMotorSpeeds(&myCoords); 
} 

// I want to be able to edit myCoords within here! 
void calculateCoords(struct coords* myCoords) 
{ 
    myCoords->x = 100; 
} 
+1

'int main void()' ..typo? должен быть 'int main (void)'. –

+0

Это всего лишь псевдокод. Но да, я исправлю это. –

+0

'calculateCoords (& myCoords); calculateMotorSpeeds (& myCoords); 'remove' &' – BLUEPIXY

ответ

1

Внутри вашей doStuff() функции, myCoords уже указатель. Вы можете просто передать этот указатель непосредственно на функцию calculateCoords() и calculateMotorSpeeds().

Кроме того, с прототипом функцией, как

void calculateCoords(struct coords* myCoords) 

вызывающего

calculateCoords(&myCoords); 

из doStuff() не так, как это проходит struct coords**.

Решение:

Держите сигнатуру для calculateCoords() неповрежденного, просто chnage призыва

calculateCoords(myCoords); 

, а затем, любые изменения, внесенные в любом переменный члене через myCoords внутри calculateCoords будут отражены в myCoords в main().

+0

Отлично, вот что я думал, но не был уверен. –

+0

@EricE 'void calculateCoords (struct coords * myCoords)' отлично. просто назовите его как 'calculateCoords (myCoords);' –

+0

Отлично, спасибо за поспешную помощь. Я понимаю использование указателей, но это бросило меня в поворот. –

1

doStuff уже имеет указатель на ваш struct coords объект. Ему не нужно ничего делать, чтобы передать этот указатель на другие функции. Таким образом, вы можете просто определить doStuff так:

void doStuff(struct coords* myCoords) 
{ 
    calculateCoords(&myCoords); 
    calculateMotorSpeeds(&myCoords); 
} 

Причина, почему вам необходимо пройти &myCoords для вызова doStuff в main является то, что есть, название myCoords относится к struct coords объекта, а не указатель.

+0

Спасибо за ответ. myCoords уже является указателем, поэтому нет необходимости использовать 'calculateCoords (& myCoords)'. 'calculateCoords (myCoords)' достаточно. –

Смежные вопросы