Thread View: pl.comp.lang.c
7 messages
7 total messages
Started by Adam Bienias
Thu, 29 Jan 1998 16:12
Wzajemna referencja struktur.
Author: Adam Bienias
Date: Thu, 29 Jan 1998 16:12
Date: Thu, 29 Jan 1998 16:12
12 lines
791 bytes
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.
Author: Robert Wiejak
Date: Thu, 29 Jan 1998 17:56
Date: Thu, 29 Jan 1998 17:56
63 lines
1956 bytes
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.
Author: Grzegorz Szyszl/o
Date: Thu, 29 Jan 1998 18:28
Date: Thu, 29 Jan 1998 18:28
34 lines
1405 bytes
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)
Author: Robert Wiejak
Date: Thu, 29 Jan 1998 18:56
Date: Thu, 29 Jan 1998 18:56
67 lines
2103 bytes
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.
Author: Karpierz
Date: Thu, 29 Jan 1998 19:04
Date: Thu, 29 Jan 1998 19:04
45 lines
1563 bytes
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)
Author: Karpierz
Date: Thu, 29 Jan 1998 19:19
Date: Thu, 29 Jan 1998 19:19
36 lines
1440 bytes
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.
Author: Maciej MOCHOL
Date: Fri, 30 Jan 1998 14:08
Date: Fri, 30 Jan 1998 14:08
31 lines
1269 bytes
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