array als parameter / sizeof()

Gast #2180982
Lesenswert?

Hallo,
ích habe das Problem, dass ich mit der sizeof()-Funktion einen anderen 
Wert erhalte wenn das Argument als Parameter übergeben wurde:


void GetIntParam(intTypePrm intParam[]);

typedef struct{
  char* name;
  ViInt32* value;
}intTypePrm;

int status1 = 1;
int status2 = 2;

intTypePrm intParam[] = {{"status1", &status1}, \
                       {"status2", &status2}};

printf("%d\n", sizeof (intParam));
GetIntParam(intParam);

void GetIntParam(intTypePrm intParam[]){
        printf("%d\n", sizeof (intParam));
}
Gast #2181013
Lesenswert?

@: ... (Gast) mit der Antwort kann ich leider nichts anfangen.
Ich denke das mir beim Aufruf nur noch die Größe des zeigers auf das 
Array angezeigt wird (4 Bytes). Bei der direkten Ausgabe werden alle 
Zeiger des structs berücksichtigt (4 x4 Bytes). Nur wie umgehe ich das 
und erhalte die in der Funktion das gleiche Ergebnis?
Hier nochmal das ganze als lauffähiger code:

#include <string.h>
#include <stdio.h>
#include <time.h>


void CMUInit(void);
void ZVMInit(void);

typedef struct{
  char* name;
  int* value;
}intTypePrm;

void GetIntParam(intTypePrm intParam[]);

int main(void){
  int status1 = 1;
  int status2 = 2;

  intTypePrm intParam[] = {{"status1", &status1}, {"status2", 
&status2}};

  printf("%d\n", sizeof (intParam));
  GetIntParam(intParam);

  return 0;
}

void GetIntParam(intTypePrm intParam[]){
  printf("%d\n", sizeof (intParam));
}
Gast #2181019
Lesenswert?

daniel schrieb:
> Nur wie umgehe ich das
> und erhalte die in der Funktion das gleiche Ergebnis?

es geht nicht!!!!!

es gibt von array in C keien größe die zur laufzeit ermittelbar ist. 
entweder machst du dir ein DEFINE oder gibt dir größe der Funktion als 
zusatz parameter mit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren