/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Initialisering af et array af structs
Fra : kim


Dato : 20-04-04 10:05

Hejsa,

Hvordan kan man initialisere et array af struct til nogle bestemte værdier?

Jeg har en struct :
typedef struct {
UINT16 opAddress;
BYTE hwAddress[6];
BYTE connHandle[2];
BYTE device;//this is the device driver number
} NeighbourEntry;
nu vil jeg gerne at alle struct elementer i
NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE];
bliver initialiseret til:
{ 0, {0},{0xFF,0xFF},0 }
altså alt nul undtagen connHandle, men det virker ikke at skrive

NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE]={ 0, {0},{0xFF,0xFF},0 };

BYTE er en unsigned char og UINT16 er unsigned short.

Mvh
Kim

 
 
Bertel Lund Hansen (20-04-2004)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-04-04 12:01

kim skrev:

>Hvordan kan man initialisere et array af struct til nogle bestemte værdier?

F.eks. ved at oprette en konstant struct med de rigtige værdier
og så sætte elementerne lig med den.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Jesper Louis Anderse~ (20-04-2004)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 20-04-04 11:54

kim <klbe00@removecontrol.auc.dk> wrote:

> NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE]={ 0, {0},{0xFF,0xFF},0 };

Du kunne jo altid lave en loekke og rykke henover dit array.

> BYTE er en unsigned char og UINT16 er unsigned short.

Det har jeg det lidt daarligt med. unsigned short er ikke altid garanteret
til at vaere UINT16 paa alle archs. Posix definerer ioevrigt nogle stoerrelser
der ligner dine.

--
j.

kim (20-04-2004)
Kommentar
Fra : kim


Dato : 20-04-04 14:38

Jesper Louis Andersen wrote:
> kim <klbe00@removecontrol.auc.dk> wrote:
>
>
>>NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE]={ 0, {0},{0xFF,0xFF},0 };
>
>
> Du kunne jo altid lave en loekke og rykke henover dit array.
ja det bruger vi også nu, men ville gerne hvis der var en anden metode
til dette.

>
>
>>BYTE er en unsigned char og UINT16 er unsigned short.
>
>
> Det har jeg det lidt daarligt med. unsigned short er ikke altid garanteret
> til at vaere UINT16 paa alle archs. Posix definerer ioevrigt nogle stoerrelser
> der ligner dine.
vi bruger en gcc og en HITECH compiler til det samme kode og jeg ved
ikke om HITECH er posix kompatibel. Derfor definere vi en UINT16, BYTE
og nogle flere i nogle definements som afhænger af hvilken compiler..

Mvh
Kim

N_N (20-04-2004)
Kommentar
Fra : N_N


Dato : 20-04-04 14:51

> Hvordan kan man initialisere et array af struct til nogle bestemte
værdier?
>
> Jeg har en struct :
> typedef struct {
> UINT16 opAddress;
> BYTE hwAddress[6];
> BYTE connHandle[2];
> BYTE device;//this is the device driver number
> } NeighbourEntry;
> nu vil jeg gerne at alle struct elementer i
> NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE];
> bliver initialiseret til:
> { 0, {0},{0xFF,0xFF},0 }
> altså alt nul undtagen connHandle, men det virker ikke at skrive
>
> NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE]={ 0, {0},{0xFF,0xFF},0 };

Hej Kim tjek længere nede ved stjernerne. Sådan løste jeg dette problem.
Sikkert ikke den mest elegante, men det virker!!

N


/* FILE SPSKGR.H */
/* Sporskift erkl'ringer */
#define SPSKGR_H_VER "2.11 Dato 07/05-2001"

#ifndef __SPSKGR_H
#define __SPSKGR_H
#endif

#ifndef __GRPL_H
#include "grpl.h"
#endif

#ifndef __SPSK_H
#include "spsk.h"
#endif

#ifndef __IOKORT_H
#include "iokort.h"
#endif

const UBYTE SpskGrAnt=8;
const UBYTE SpskGrMaxKoer=1;

struct In1 const SpskGrFknp={1};

struct In2 const SpskGrInk00={33, 32};
struct Out1 const SpskGrMot00={8};
struct In1 const SpskGrKnp00={24};
struct spskvar SpskGrVar00={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[0],NULL};

struct In2 const SpskGrInk01={35,34};
struct Out1 const SpskGrMot01={9};
struct In1 const SpskGrKnp01={25};
struct spskvar SpskGrVar01={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[1],NULL};

struct In2 const SpskGrInk02={37,36};
struct Out1 const SpskGrMot02={10};
struct In1 const SpskGrKnp02={26};
struct spskvar SpskGrVar02={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[2],NULL};

struct In2 const SpskGrInk03={39,38};
struct Out1 const SpskGrMot03={11};
struct In1 const SpskGrKnp03={27};
struct spskvar SpskGrVar03={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[3],NULL};

struct In2 const SpskGrInk04={41,40};
struct Out1 const SpskGrMot04={12};
struct In1 const SpskGrKnp04={28};
struct spskvar SpskGrVar04={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[4],NULL};

struct In2 const SpskGrInk05={43,42};
struct Out1 const SpskGrMot05={13};
struct In1 const SpskGrKnp05={29};
struct spskvar SpskGrVar05={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[5],NULL};

struct In2 const SpskGrInk06={45,44};
struct Out1 const SpskGrMot06={14};
struct In1 const SpskGrKnp06={30};
struct spskvar SpskGrVar06={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[6],NULL};

struct In2 const SpskGrInk07={47,46};
struct Out1 const SpskGrMot07={15};
struct In1 const SpskGrKnp07={31};
struct spskvar SpskGrVar07={0,0,FALSK,FALSK,FALSK,&GrBs.Bl[7],NULL};


**** Her er min version af samme problem ****

struct spsk SpskGr[SpskGrAnt]=
{
&SpskGrInk00, &SpskGrMot00, &SpskGrKnp00, NULL, &SpskGrVar00, NULL,
&SpskGrInk01, &SpskGrMot01, &SpskGrKnp01, NULL, &SpskGrVar01, NULL,
&SpskGrInk02, &SpskGrMot02, &SpskGrKnp02, NULL, &SpskGrVar02, NULL,
&SpskGrInk03, &SpskGrMot03, &SpskGrKnp03, NULL, &SpskGrVar03, NULL,
&SpskGrInk04, &SpskGrMot04, &SpskGrKnp04, NULL, &SpskGrVar04, NULL,
&SpskGrInk05, &SpskGrMot05, &SpskGrKnp05, NULL, &SpskGrVar05, NULL,
&SpskGrInk06, &SpskGrMot06, &SpskGrKnp06, NULL, &SpskGrVar06, NULL,
&SpskGrInk07, &SpskGrMot07, &SpskGrKnp07, NULL, &SpskGrVar07, NULL
};

struct spskconst const SpskGrConst=
{
SpskGrAnt,
SpskGrMaxKoer,
GrScr,
&SpskGrFknp,
NULL
};

struct spskdef GrSpsk=
{
// Omst, Magz, Fejl, OvStrp, CkOvStrp, OvStrpStart, CkOvStrpStart
0, 0, FALSK, FALSK, FALSK, 0, 0,
&SpskGrConst,
SpskGr,
NULL,
NULL,
NULL,
NULL
};




Byrial Jensen (20-04-2004)
Kommentar
Fra : Byrial Jensen


Dato : 20-04-04 22:02

kim wrote:
> Hejsa,
>
> Hvordan kan man initialisere et array af struct til nogle bestemte værdier?
>
> Jeg har en struct :
> typedef struct {
> UINT16 opAddress;
> BYTE hwAddress[6];
> BYTE connHandle[2];
> BYTE device;//this is the device driver number
> } NeighbourEntry;
> nu vil jeg gerne at alle struct elementer i
> NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE];
> bliver initialiseret til:
> { 0, {0},{0xFF,0xFF},0 }
> altså alt nul undtagen connHandle

Det ville gøre det nemmere at svare hvis du skrev hvilket sprog du
bruger, og om neighbourTable har automatisk eller statisk varighed.

Hvis du bruger C99, og hvis der er tale om en statisk variabel, kan du
skrive:

include <stdint.h>
typedef uint16_t UINT16;
typedef uint8_t BYTE;

typedef struct {
UINT16 opAddress;
BYTE hwAddress[6];
BYTE connHandle[2];
BYTE device; //this is the device driver number
} NeighbourEntry;

#define MAXNEIGHBOURSIZE 4

NeighbourEntry neighbourTable[MAXNEIGHBOURSIZE] =
{
[0].connHandle = { 0, 0 },
[1].connHandle = { 1, 1 },
[2].connHandle = { 2, 2 },
[3].connHandle = { 3, 3 },
};


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste