Struktury w języku C.

0

Witam!

Chciałbym się zapytać w jaki sposób zapisać mogę coś do struktury w strukturze.

Załóżmy że mamy:


Struct rodzina_t{
    int a;
    int b;
};

Struct znajomi_t{
      struct rodzina_t rodzina;
    ......
};

struct znajomi_t* czytaj(struct znajomi_t* p){
    
    int x=2;
    //jak przypisac za pomocą operatora strzałki (->) to x=2 do struktury rodzina, int a?
    . . . . .
}

Pozdrawiam

1

//jak przypisac za pomocą operatora strzałki (->) to x=2 do struktury rodzina, int a?

rodzina_t->a = x;?
Czy masz coś innego na myśli?

0

Jakie x?

2
p->rodzina.a = x;
p->rodzina.b = x;

ale nie wiem w sumie czy o to chodziło :D

1

To jest typowy i częsty idiom dziedziczenia implementowany w C. Wystarcza rzutowanie na wskaźnik struktury rodzica aby dostać się do jego atrybutów bezpośrednio. Warunkiem koniecznym jest występowanie tegoż rodzica jako 1 składnika struktury dziecka. Tak się buduje "obiekty sterowników" np. w systemie GNU/Linux lub tworzy się inne wymaganie hierarchie.

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

struct rodzina_t{
    int a;
    int b;
};

struct znajomi_t{
    struct rodzina_t rodzina;
    int c;
};

struct znajomi_t* ustaw(struct znajomi_t* p) {
    struct rodzina_t * rodzinaPtr = (struct rodzina_t *)p;
    rodzinaPtr->a = 1;
    rodzinaPtr->b = 2;
    p->c = 3;
    return p;
}

void pokaz(struct znajomi_t const * p) {
    struct rodzina_t * rodzinaPtr = (struct rodzina_t *)p;
    printf("%d, %d, %d\n", rodzinaPtr->a, rodzinaPtr->b, p->c);
}

int main(void) {
    struct znajomi_t znajomi;
    ustaw(&znajomi);
    pokaz(&znajomi);
    return EXIT_SUCCESS;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1