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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.