Avatar billede morw Nybegynder
30. januar 2004 - 19:59 Der er 6 kommentarer og
1 løsning

Array af struct i en struct

#include <stdio.h>

struct person {
  char forbogstav;
  int alder;
};


struct db {
  int nr;
  struct person *medlem;
} ;


int main()
{

  // to personer
  struct person P1, P2;

  // en liste
  struct person *list1[2] = {&P1, &P2};
  struct db d1;

  P1.forbogstav = 'R';
  P1.alder = 21;

  P2.forbogstav = 'B';
  P2.alder = 24;

  d1.nr = 1;
  d1.medlem = *list1;


  printf("Test: forbogstav= %c  alder= %d \n", d1.medlem[0].forbogstav, d1.medlem[0].alder);

  printf("Test: forbogstav= %c  alder= %d \n", d1.medlem[1].forbogstav, d1.medlem[1].alder);

}
Avatar billede morw Nybegynder
30. januar 2004 - 20:00 #1
Måske lige dette skulle med:


Jeg har problemer med at tilgå data fra en struct der ligger i en anden struct.

Jeg har lige skrevet lidt kode der viser problemet.

Jeg kan sagtens tilgå det første element via d1.medlem[0].forbogstav, men så snart jeg kommer til d1.medlem[1].forbogstav får jeg forkert data ud:

# ./t
Test: forbogstav= R  alder= 21
Test: forbogstav= ¼  alder= 134513670

Der er sikkert noget med pointers, som jeg ikke er helt stiv i.

Håber nogen kan hjælpe.

/ morten
Avatar billede arne_v Ekspert
30. januar 2004 - 20:43 #2
Det her virker:

#include <stdio.h>

struct person {
  char forbogstav;
  int alder;
};


struct db {
  int nr;
  struct person **medlem;
} ;


int main()
{

  // to personer
  struct person P1, P2;

  // en liste
  struct person *list1[2] = {&P1, &P2};
  struct db d1;

  P1.forbogstav = 'R';
  P1.alder = 21;

  P2.forbogstav = 'B';
  P2.alder = 24;

  d1.nr = 1;
  d1.medlem = list1;


  printf("Test: forbogstav= %c  alder= %d \n", d1.medlem[0]->forbogstav, d1.medlem[0]->alder);

  printf("Test: forbogstav= %c  alder= %d \n", d1.medlem[1]->forbogstav, d1.medlem[1]->alder);

}
Avatar billede arne_v Ekspert
30. januar 2004 - 20:44 #3
Problemet er at P1 og P2 ikke ligge kontinuert i memory.
Avatar billede morw Nybegynder
30. januar 2004 - 20:55 #4
Tak kan du uddybe for forståelsen.

Hvad gør de **? Pointer til array?

hvornår bruger man -> og hvornår kan man blot bruge .
Avatar billede arne_v Ekspert
30. januar 2004 - 21:02 #5
** = pointer til pointer

man bruger . med struct og -> med pointer til struct
Avatar billede arne_v Ekspert
16. februar 2004 - 22:12 #6
Tid at lukke spørgsmålet ?
Avatar billede morw Nybegynder
17. februar 2004 - 15:36 #7
ja det må man sige
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester