Avatar billede anjensen1 Novice
21. april 2005 - 16:01 Der er 9 kommentarer og
1 løsning

arrays af struct type

hej
en lidt sær konstruktion:

typedef struct
    byte    *imgDta;
    int    bpp;
    int    width;
    int    height;
    int    texID;
} eImage;

eImage tStore[1];

min vurdering:
vi har en struct af navn eImage (iøvrigt sært at navngive efter
definition?)
vi opretter datastrukturen tStore -et array som har typen eImage.
tStore har size 1
Der er dermed tStore{0,1} til rådighed
På intet tidspunkt anvendes mulighed '1' -Alle operationer kaldes på
tStore[0]
Teoretisk kan tStore godt udvides, mao -det vil give mening MEN når
man her låser sig på EEN lagring (altså tStore[1] anvendes aldrig og
vil ikke kunne anvendes) KUNNE man så ikke nøjes med
eImage tStore[0];
og dermed have tStore{0} til rådighed
-Der spildes vel noget mem i allokeringen til tStore{0,1}
eller..?
pfh tak.
Avatar billede arne_v Ekspert
21. april 2005 - 16:09 #1
#Der er dermed tStore{0,1} til rådighed

forkert

tStore{0,0} er til rådighed

#På intet tidspunkt anvendes mulighed '1' -Alle operationer kaldes på tStore[0]

godt det samme, da 1 som sagt ikke eksisterer
Avatar billede arne_v Ekspert
21. april 2005 - 16:10 #2
#(altså tStore[1] anvendes aldrig og vil ikke kunne anvendes) KUNNE man så ikke nøjes med
#eImage tStore[0];
#og dermed have tStore{0} til rådighed
#-Der spildes vel noget mem i allokeringen til tStore{0,1}

eImage tStore[0];

vil allokere ingen elementer

1) det giver ingen mening

2) jeg mener at de fleste C compilere vil give en fejl
Avatar billede arne_v Ekspert
21. april 2005 - 16:11 #3
det grundliggende er at:

noget a[n];

allokerer n elementer fra 0 til n-1
Avatar billede anjensen1 Novice
21. april 2005 - 16:48 #4
QeImage tStore[0];
vil allokere ingen elementer
1) det giver ingen mening
2) jeg mener at de fleste C compilere vil give en fejl
det grundliggende er at:
noget a[n];
allokerer n elementer fra 0 til n-1
q
ja jeg tror at det er den n-1 der giver svaret
hvis allokeringen var
eImage tStore[0]
-> n==0 så vil det jo give 0-1 == bøh
fjollet af mig at glemme n-1 reglen bare fordi arrayet er struct type
.. 
-den dér med at tilføje navnet efter definitionen -Har du noget på den, eller er det også bare 'cpp-bøh'
(husk svar:)
Avatar billede arne_v Ekspert
21. april 2005 - 16:53 #5
svar
Avatar billede arne_v Ekspert
21. april 2005 - 16:55 #6
I ren C kan du:

struct X
{
  ...
};

struct X a[10];

eller

typedef struct
{
  ...
} X;

X a[10];

[det er ikke nødvendigt i C++]
Avatar billede anjensen1 Novice
21. april 2005 - 19:22 #7
oki :) tak -igen
Avatar billede bertelbrander Novice
21. april 2005 - 19:51 #8
Nogle C kompilere accepterer dette:

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

typedef struct
{
  int Size;
  int Array[0];
}MyStruct;

void Func(MyStruct *s)
{
  int i, sum;
  for(i = 0, sum = 0; i < s->Size; i++)
      sum += s->Array[i];
  printf("Sum: %d\n", sum);
}

int main()
{
  int i;
  MyStruct *S = malloc(sizeof(MyStruct) + 10*sizeof(int));
  S->Size = 10;

  for(i = 0; i < 10; i++)
      S->Array[i] = i;
  Func(S);
  free(S);
  return 0;
}

Hvilket kan være meget handy.
Avatar billede arne_v Ekspert
21. april 2005 - 20:57 #9
Der er også compilere som accepterer:


typedef struct
{
  int Size;
  int Array[];
}MyStruct;

men ...
Avatar billede bertelbrander Novice
21. april 2005 - 21:27 #10
I C99 er det faktisk lovligt, se punkt 28:

http://home.tiscalinet.ch/t_wolf/tw/c/c9x_changes.html

Desværre findes der ikke nogen rigtige C99 kompilere...
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