C объяснение инструкции - PullRequest
0 голосов
/ 13 апреля 2011

любой может объяснить следующие инструкции:

int *c[10];

char *(**n)(void);

float *(**r(void))[6];


short *(**v(void))(int);


long *(*(*(*z)(void))[7])(void);

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

http://www.cdecl.org/ объяснит все эти утверждения. Правило C на лево-лево объясняет, как читать C-описания довольно хорошо.Есть много других доступных ресурсов, в частности в этом вопросе .

2 голосов
/ 13 апреля 2011

Так как это твоя домашняя работа, ты не узнаешь об этом, рассказав тебе все;) Но, один намек.Вы можете создавать и передавать указатели на функции в C, а не только на переменные.

Аргументы функций для всех, кроме первого примера, являются прототипами для указателей на функции.

Скажем, у нас есть библиотека для тестирования цветов,мы могли бы позволить пользователям нашей библиотеки предоставлять собственные способы получения названия цвета.Мы могли бы определить структуру для передачи пользователям, содержащую обратные вызовы, которые мы можем вызвать.

struct colour_tester {
  char *(*colour_callback)(void);    
}

// test the user's function if given
void run_test(struct colour_tester *foo ){
  // use the callback function if set
  if ( foo->colour_callback != NULL ){
    char * colour = (*foo->colour_callback)();
    printf( "colour callback returned %s\n", colour );
  }
}

Тогда пользователи библиотеки будут свободны определять реализации этих функций обратного вызова и передавать их нам в качестве указателя на функцию.

#include <colour_tester.h>

char * get_shape_colour(){
  return "red";
}

int main ( int argc, char** argv ) {
  // create a colour tester and tell it how to get the colour
  struct colour_tester foo;
  foo.colour_callback = &get_shape_colour;
  run_test( &foo );
}

Я оставляю вас выяснить, что происходит с теми, у кого есть дополнительные числа * s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...