Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: shoshon в Sep 28, 2010, 17:33



Титла: Семантика: С структура
Публикувано от: shoshon в Sep 28, 2010, 17:33
Имам проблеми да разбера следния код. Изобщо не ме интересува какво прави. Искам само да схвана семантиката:
Код
GeSHi (C):
  1. struct pipe_screen {
  2. ...
  3. /**
  4. * Create a new texture object, using the given template info.
  5. */
  6.  struct pipe_texture * (*texture_create)(struct pipe_screen *,
  7.     const struct pipe_texture *);
  8.  struct pipe_buffer *(*buffer_create)( struct pipe_screen *screen,
  9.     unsigned alignment,
  10.     unsigned usage,
  11.     unsigned size );
  12. ...
  13. };

Благодаря предварително.


Титла: Re: Семантика: С структура
Публикувано от: task_struct в Sep 28, 2010, 19:18
Код
GeSHi (C):
  1. (*texture_create)
- указател към функция
Код
GeSHi (C):
  1. (struct pipe_screen *, const struct pipe_texture *)
- параметри на функцията
Код
GeSHi (C):
  1. struct pipe_texture *
тип на резултата, който функцията връща


Титла: Re: Семантика: С структура
Публикувано от: bvbfan в Sep 28, 2010, 19:26
Това указател към функция, тъй като на С "обектите" нямат методи, това е еквивалент на методите в С++
Пример:

struct pipe_texture* texture_create_constructor( struct pipe_screen *s, const struct pipe_texture *t)
{
     struct pipe_texture *n = (struct pipe_texture *)malloc( sizeof( struct pipe_texture ) );
     n->screen = s;
     n->texture = t;
     return n;
}

.....

/* някъде из кода, където се създава променливата */
struct pipe_screen a;
a.texture_create = texture_create_constructor; /* указателът към функция се инициализира към функцията със същите входни параметри */
....
/*някъде където се използва */
a.texture_create( /*входни параметри*/ ); /* извиква се texture_create_constructor посредством указателят texture_create */

Като цяло не е трудно, ако искаш може да в реален код да покажа, ако не си схванал идеята :)


Титла: Re: Семантика: С структура
Публикувано от: shoshon в Sep 29, 2010, 13:14
Пуу разгеле. Мерси момчета.