|
| 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
| |
|
|