Typedef struct, указатели и передача указателей на функцию - PullRequest
1 голос
/ 30 сентября 2019

Я немного новичок в программировании, поэтому, если кто-то может мне помочь, я это ценю!


typedef struct /*struct for circle creation*/
{
  int x_coord;
  int y_coord;
  int radius;
} circle, *circlepointer;

Мне нужен указатель на круг, и я передаю этот указатель в функцию, которая возвращает true, если круградиус> 0 и ложь в противном случае. Как передать мой * circlepointer функции и проверить это? Я должен быть в состоянии сделать что-то вроде circle.radius> 0, в функции

Надеюсь, вы можете помочь

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Функция может быть объявлена ​​как

int f( circlepointer c );

или

int f( const circle *c );

и названа как

circle c = { /*...*/ };

f( &c );

Внутри функции вы можете получить доступ к элементам данныхобъект типа c->radius или ( *c ).radius.

Вместо типа возвращаемого значения int вы также можете использовать тип C _Bool. Или вы можете включить заголовок <stdbool.h> и записать тип возвращаемого значения как bool.

Обратите внимание на то, что эти два объявления функций

int f( const circlepointer c );

и

int f( const circle *c );

не эквивалентны. В первом объявлении сам указатель является константой. Во втором объявлении объект, на который указывает указатель, является константой.

1 голос
/ 30 сентября 2019

Вы можете объявить и определить свою функцию таким образом

int func(circle * c) {
    return c->radius > 0;
}

Доступ к члену через указатель может быть сделан с помощью оператора -> или путем разыменования указателя, а затем просто использования. оператор, чтобы получить доступ к своим членам

(*c).radius 
c->radius

, а затем просто позвонить на основной

circle c = {your_x, your_y, your_radius};
func(&c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...