Указатель на функцию доступа определен в структуре? - PullRequest
0 голосов
/ 12 ноября 2009

Напишите программу для доступа к функции "foo", используя структуру структуры 2.

typedef struct
{
   int *a;
   char (*fptr)(char*);
}structure1;

typedef struct
{
   int x;
   structure1 *ptr;
}structure2;

char foo(char * c)
{
---
---
---
}

Ответы [ 2 ]

1 голос
/ 12 ноября 2009
structure2 *s2 = (structure2*)malloc(sizeof(structure2));
s2->ptr = (structure1*)malloc(sizeof(structure1));
s2->ptr->fptr = foo;
char x = 'a';
s2->ptr->fptr(&x);
0 голосов
/ 12 ноября 2009
  • Создать объект типа structure2
  • Назначить ему адрес объекта типа structure1 (это можно сделать несколькими способами)
  • Присвойте foo выделенному выше structure1 объекту fptr члену
  • вызову foo, используя:

    structure2 s2;
    // allocate 
    char c = 42;
    s2.ptr->fptr(&c);  // if this 
    

Пример:

typedef struct
{
   int *a;
   char (*fptr)(char*);
}structure1;

typedef struct
{
   int x;
   structure1 *ptr;
}structure2;

char foo(char * c)
{
return 'c';
}

int main()
{
 structure1 s1;
 structure2 s2;
 s1.fptr = foo;
 s2.ptr = &s1; 
 char c = 'c';
 printf("%c\n", s2.ptr->fptr(&c));
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...