Автор Тема: Семантика: С структура  (Прочетена 941 пъти)

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Семантика: С структура
« -: 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. };

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

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Re: Семантика: С структура
« Отговор #1 -: 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 *
тип на резултата, който функцията връща
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

bvbfan

  • Напреднали
  • *****
  • Публикации: 1056
  • Distribution: KaOS
  • Window Manager: Plasma 5
    • Профил
Re: Семантика: С структура
« Отговор #2 -: 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 */

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

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: Семантика: С структура
« Отговор #3 -: Sep 29, 2010, 13:14 »
Пуу разгеле. Мерси момчета.
Активен