2012-09-28 10 views

Odpowiedz

32

Nie, nie można zdefiniować funkcję w struct w C.

Możesz mieć wskaźnik funkcji w struct chociaż ale posiadające wskaźnik funkcji różni się bardzo od funkcja składowa w C++, a mianowicie nie ma domyślnego wskaźnika this do instancji zawierającej struct.

wymyślony przykład (demo w Internecie http://ideone.com/kyHlQ):

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

struct point 
{ 
    int x; 
    int y; 
    void (*print)(const struct point*); 
}; 

void print_x(const struct point* p) 
{ 
    printf("x=%d\n", p->x); 
} 

void print_y(const struct point* p) 
{ 
    printf("y=%d\n", p->y); 
} 

int main(void) 
{ 
    struct point p1 = { 2, 4, print_x }; 
    struct point p2 = { 7, 1, print_y }; 

    p1.print(&p1); 
    p2.print(&p2); 

    return 0; 
} 
7

W C nie jest dopuszczalne, aby zdefiniować sposób wewnątrz struct. Można zdefiniować wskaźnik funkcji wewnątrz struct następująco:

typedef struct { 
    double x, y, z; 
    struct Point *next; 
    struct Point *prev; 
    void (*act)(); 
} Point; 

trzeba będzie przypisać wskaźnik do konkretnej funkcji, kiedy tylko instancję struct.

2

Chodzi o to, aby umieścić wskaźnik w funkcji wewnątrz struktury. Funkcja jest następnie zadeklarowana poza strukturą. Różni się to od klasy w C++, gdzie funkcja jest zadeklarowana w klasie.

Na przykład: kradzież kod tutaj: http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

struct t { 
    int a; 
    void (*fun) (int * a); 
} ; 

void get_a (int * a) { 
    printf (" input : "); 
    scanf ("%d", a); 
} 

int main() { 
    struct t test; 
    test.a = 0; 

    printf ("a (before): %d\n", test.a); 
    test.fun = get_a; 
    test.fun(&test.a); 
    printf ("a (after): %d\n", test.a); 

    return 0; 
} 

gdzie test.fun = get_a; przypisuje funkcję do wskaźnika w struktury, a test.fun(&test.a); nazywa.

1

Można zdefiniować wskaźnik funkcji tylko w struct w języku programowania C, który różni się od C++.

11

Możesz mieć wskaźnik funkcji w strukturze. ale nie w ten sposób

można zdefiniować w ten sposób

przykład:

typedef struct cont_func { 
    int var1; 
    int (*func)(int x, int y); 
    void *input; 
} cont_func; 


int max (int x, int y) 
{ 
    return (x>y)?x:y; 
} 

int main() { 
    struct cont_func T; 

    T.func = max; 

} 
Powiązane problemy