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));
}
siehe: Beitrag "Array vorbelegen und Anzahl Einträge in enum?" Da findest Du u.a. auch die Erklärung dafür.
@: ... (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));
}
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.
daniel schrieb: > Nur wie umgehe ich das > und erhalte die in der Funktion das gleiche Ergebnis? Direkt gar nicht. Deklarier Deine Funktion so:
1 | void GetIntParam(intTypePrm intParam[], size_t size); |
und ruf sie in main so auf:
1 | GetIntParam(intParam, sizeof(intParam)); |
Ansonsten such hier im Forum nach 'sizeof', das Thema gibts alle Nase lang: http://www.mikrocontroller.net/search?query=sizeof
Ok, Danke Leute
Das ist wohl auch der Grund von:
int main (int argc, char *argv[]){
}
Nicht unbedingt. Man kann bei solchen Arrays wie argv auch den letzten Eintrag auf NULL setzen. Wird teilweise auch gemacht
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.