🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

7 total messages Started by Adam Bienias Thu, 29 Jan 1998 16:12
Wzajemna referencja struktur.
#1099
Author: Adam Bienias
Date: Thu, 29 Jan 1998 16:12
12 lines
791 bytes
Mam problem ktorego jakos nie moge rozwiazac. Potrzebuje zdefiniowac
dwie struktury, przy czym kazda moze wskazywac na druga:

typedef struct {
   BETA_STRC  *hans;	
} ALFA_STRC;

typedef struct {
   ALFA_STRC  *kloss;	
} BETA_STRC;

Jak to zrobic ?
Re: Wzajemna referencja struktur.
#1100
Author: Robert Wiejak
Date: Thu, 29 Jan 1998 17:56
63 lines
1956 bytes
Adam Bienias wrote in message <34D0AA82.46D7@polbox.com.pl>...
>Mam problem ktorego jakos nie moge rozwiazac. Potrzebuje zdefiniowac
>dwie struktury, przy czym kazda moze wskazywac na druga:
>
>typedef struct {
>   BETA_STRC  *hans;
>} ALFA_STRC;
>
>typedef struct {
>   ALFA_STRC  *kloss;
>} BETA_STRC;
>
>Jak to zrobic ?

Troche twoj przyklad zmienilem, ale to tylko zeby latwiej
zrozumiec:

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

typedef struct
{
   void  *beta;
   char imie[25];
} ALFA_STRC;

typedef struct
{
   void  *alfa;
   char nazwisko[25];
} BETA_STRC;

main(void)
{
    ALFA_STRC *alfa = NULL;
    BETA_STRC *beta = NULL;

    alfa = (ALFA_STRC*) malloc(sizeof(ALFA_STRC));
    beta = (BETA_STRC*) malloc(sizeof(BETA_STRC));

    alfa->beta  = (void*)beta;
    beta->alfa = (void*)alfa;

    // pisze do BETA_STRC przez ALFA_STRC
    strcpy(((BETA_STRC*)alfa->beta)->nazwisko, "Kloss");

    // pisze do ALFA_STRC przez BETA_STRC
    strcpy(((ALFA_STRC*)beta->alfa)->imie, "Hans");

    // bezposrednio
    printf("Nazwisko: %s\n", beta->nazwisko);
    printf("    Imie: %s\n\n", alfa->imie);

    free(alfa);
    free(beta);

    return 0;
}

Robert
Re: Wzajemna referencja struktur.
#1102
Author: Grzegorz Szyszl/o
Date: Thu, 29 Jan 1998 18:28
34 lines
1405 bytes
Adam Bienias <souadam@polbox.com.pl> wrote:
>Mam problem ktorego jakos nie moge rozwiazac. Potrzebuje zdefiniowac
>dwie struktury, przy czym kazda moze wskazywac na druga:
>
>typedef struct {
>   BETA_STRC  *hans;	
>} ALFA_STRC;
>
>typedef struct {
>   ALFA_STRC  *kloss;	
>} BETA_STRC;
>
>Jak to zrobic ?



blad. powinno byc tak:

typedef struct {
   struct BETA_STRC  *hans;	
} ALFA_STRC;

typedef struct {
   struct ALFA_STRC  *kloss;	
} BETA_STRC;


typedef mozna pominac.

-- 
/===================================\    oOOo      W temperaturze zera
| http://avalon.wbc.lublin.pl/~znik/ \===\__/==\   bezwzglednego swiatlo
| Grzegorz Szyszlo   mailto:znik@wbc.lublin.pl |   zmienia postac
\==============================================/   alotropowa   (by Znik)
Re: Wzajemna referencja struktur. (poprawka)
#1101
Author: Robert Wiejak
Date: Thu, 29 Jan 1998 18:56
67 lines
2103 bytes
Robert Wiejak wrote in message <6aqfn1$fn8$1@news.bctel.net>...
>
>Adam Bienias wrote in message <34D0AA82.46D7@polbox.com.pl>...
>>Mam problem ktorego jakos nie moge rozwiazac. Potrzebuje zdefiniowac
>>dwie struktury, przy czym kazda moze wskazywac na druga:
>>
>>typedef struct {
>>   BETA_STRC  *hans;
>>} ALFA_STRC;
>>
>>typedef struct {
>>   ALFA_STRC  *kloss;
>>} BETA_STRC;
>>
>>Jak to zrobic ?
>
>Troche twoj przyklad zmienilem, ale to tylko zeby latwiej
>zrozumiec:
>

Zmienilem tu struct. ALFA_STRC i BETA_STRC.

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

typedef struct ALFA_STRC
{
    struct BETA_STRC *beta;
    char imie[25];
} ALFA_STRC;

typedef struct BETA_STRC
{
    struct ALFA_STRC *alfa;
    char nazwisko[25];
} BETA_STRC;

main(void)
{
    ALFA_STRC *alfa = NULL;
    BETA_STRC *beta = NULL;

    alfa = (ALFA_STRC*) malloc(sizeof(ALFA_STRC));
    beta = (BETA_STRC*) malloc(sizeof(BETA_STRC));

    alfa->beta = beta;
    beta->alfa = alfa;

    // pisze do BETA_STRC przez ALFA_STRC
    strcpy(alfa->beta->nazwisko, "Kloss");

    // pisze do ALFA_STRC przez BETA_STRC
    strcpy(beta->alfa->imie, "Hans");

    // bezposrednio
    printf("Nazwisko: %s\n", beta->nazwisko);
    printf("    Imie: %s\n\n", alfa->imie);

    free(alfa);
    free(beta);
    return 0;
}

Robert
Re: Wzajemna referencja struktur.
#1104
Author: Karpierz
Date: Thu, 29 Jan 1998 19:04
45 lines
1563 bytes
Adam Bienias <souadam@polbox.com.pl> napisal
> Mam problem ktorego jakos nie moge rozwiazac. 
> Potrzebuje zdefiniowac
> dwie struktury, przy czym kazda moze wskazywac na 
> druga:
> 
> typedef struct {
>    BETA_STRC  *hans;	
> } ALFA_STRC;
> 
> typedef struct {
>    ALFA_STRC  *kloss;	
> } BETA_STRC;
> 
> Jak to zrobic ?

Ja w takim przypadku stosuje konstrukcje:

/* deflaracje typu forward */

struct ALFA_S;	// wiem ze nadmiarowo ale nie zaszkodzi i jest symetrycznie
struct BETA_S;

/* deklaracje struktur */

struct ALFA_S
{
  struct BETA_S * brunner;
};

struct BETA_S
{
  struct ALFA_S * shtetke;
};

/* deklaracje typedef */   // pozwalaja opuszczac slowo struct przy
deklaracjach            

typedef struct ALFA_S  ALFA_STRC;
typedef struct BETA_S  BETA_STRC;

-- 
Pozdrawiam                                         Adam Karpierz   
mailto:karpierz@intertele.pl
http://www.intertele.pl/users/karpierz 
Re: Wzajemna referencja struktur. (autopoprawka)
#1105
Author: Karpierz
Date: Thu, 29 Jan 1998 19:19
36 lines
1440 bytes
Karpierz <karpierz@inter.intertele.pl> napisal
[...]
> Ja w takim przypadku stosuje konstrukcje:

To jest napewno zbedne w ANSI C, ale nie wiem czy w K&R..
chyba tez...

> /* deflaracje typu forward */
> 
> struct ALFA_S;	// wiem ze nadmiarowo ale nie zaszkodzi i jest 
> struct BETA_S;

Wiec wystarczy tak:

/* deklaracje struktur */
 
struct ALFA_S
{
  struct BETA_S * brunner;
};
 
struct BETA_S
{
  struct ALFA_S * shtetke;
};
 
/* deklaracje typedef */   // pozwalaja opuszczac slowo struct przy
deklaracjach            
 
typedef struct ALFA_S  ALFA_STRC;
typedef struct BETA_S  BETA_STRC;

-- 
Pozdrawiam                                         Adam Karpierz   
mailto:karpierz@intertele.pl
http://www.intertele.pl/users/karpierz 
Re: Wzajemna referencja struktur.
#1103
Author: Maciej MOCHOL
Date: Fri, 30 Jan 1998 14:08
31 lines
1269 bytes
On 29 Jan 1998, Grzegorz Szyszl/o wrote:

> blad. powinno byc tak:
> 
> typedef struct {
>    struct BETA_STRC  *hans;	
> } ALFA_STRC;
> 
> typedef struct {
>    struct ALFA_STRC  *kloss;	
> } BETA_STRC;
> 

Zauwazyliscie topic ? Chyba nie o to koledze chodzilo.

struct B;

typedef struct {
 struct B* b;
} A;

typedef struct {
 struct A* a;
} B;

-------------------------------------.
Codematic                            |            
 code@beta.cku.pwr.wroc.pl           |
 mmochol@elka.pw.edu.pl              |
http://home.elka.pw.edu.pl/~mmochol  |
-------------------------------------'
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads