/ 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 multidimensionalt array ~
Fra : John Eriksen


Dato : 05-08-07 11:54

Hejsa,

Jeg har oprettet et array på følgende måde:

struct cX X[100][100][100];

Structen cX er defineret sådan her:

struct cX
{
int (*pFunction)(char* pChar);
};


Hvordan initialiserer jeg array'et X på den hurtigste måde, således at alle
funktionspointere i X er sat til NULL ?

Skal jeg gøre det med en for-løkke eller kan det gøres på en smartere måde?

Tak på forhånd.



 
 
Kent Friis (05-08-2007)
Kommentar
Fra : Kent Friis


Dato : 05-08-07 12:12

Den Sun, 5 Aug 2007 12:53:44 +0200 skrev John Eriksen:
> Hejsa,
>
> Jeg har oprettet et array på følgende måde:
>
> struct cX X[100][100][100];
>
> Structen cX er defineret sådan her:
>
> struct cX
> {
> int (*pFunction)(char* pChar);
> };
>
>
> Hvordan initialiserer jeg array'et X på den hurtigste måde, således at alle
> funktionspointere i X er sat til NULL ?
>
> Skal jeg gøre det med en for-løkke eller kan det gøres på en smartere måde?

Kan memset ikke gøre det?

memset(&cX, 0, sizeof cX);

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Anders J. Munch (05-08-2007)
Kommentar
Fra : Anders J. Munch


Dato : 05-08-07 12:24

Kent Friis wrote:
> Den Sun, 5 Aug 2007 12:53:44 +0200 skrev John Eriksen:
>> Hvordan initialiserer jeg array'et X på den hurtigste måde, således at alle
>> funktionspointere i X er sat til NULL ?
>>
>> Skal jeg gøre det med en for-løkke eller kan det gøres på en smartere måde?
>
> Kan memset ikke gøre det?
>
> memset(&cX, 0, sizeof cX);

Principielt kan du ikke vide, om en funktionspointer hvor alle bytes er 0 er en
null pointer.

mvh. Anders

Anders J. Munch (05-08-2007)
Kommentar
Fra : Anders J. Munch


Dato : 05-08-07 12:20

John Eriksen wrote:
> Hejsa,
>
> Jeg har oprettet et array på følgende måde:
>
> struct cX X[100][100][100];
>
> Structen cX er defineret sådan her:
>
> struct cX
> {
> int (*pFunction)(char* pChar);
> };
>
>
> Hvordan initialiserer jeg array'et X på den hurtigste måde, således at alle
> funktionspointere i X er sat til NULL ?

Simpelt:
struct cX X[100][100][100] = {{{{0}}}};

Reglen for delvis initialisering er, at ikke specificerede elementer bliver sat
til 0. Så ved at specificere bare ét eneste element, så opnår du at resten
bliver 0-initialiseret, hvilket for pointere et det samme som NULL.

I øvrigt, du risikerer at spilde en masse plads ved at pakke pointeren ind i et
struct på den måde; hvis fx din compiler aligner structs til 8 bytes, og en
funktionspointer er 4 bytes, så har du fordoblet pladsbehovet fra 4 til 8 MB, i
forhold til at have arrays af rene pointere.

mvh. Anders

John Eriksen (05-08-2007)
Kommentar
Fra : John Eriksen


Dato : 05-08-07 12:34

>
> Simpelt:
> struct cX X[100][100][100] = {{{{0}}}};

Mange tak for de hurtige svar




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

Månedens bedste
Årets bedste
Sidste års bedste