Struktur an andere Funktion übergeben
-
Hallo
ein ganz grundlegendes Problem(die Pointer machen einem noch ganz wirr...):
In einer Header-Datei habe ich folgende Struktur definiert:
typedef struct
{
char vsgr;
char byat[3];
char vnzr[9];
char resv[12];
}VARIABEL_STRUCTIn einer Funktion (in dieder Quellcodedatei wurde die Header-Datei included)allokiere ich für diese Struktur so Speicher:
VARIABEL_STRUCT* variabel = new VARIABEL_STRUCT[izlvar];
Jetzt fülle ich das Strukturarray.
Nun kann ich in dieser Funktion über z.B. variabel[i].vsgr auf die einzelnen Variablen zugreifen und ändern.
Jetzt mein Problem.
Wie übergeben ich diese Struktur an eine andere Funktion und kann dann damit machen was ich möchte (z.B. den Inhalt der Variablen ändern)? Ich muss doch "nur" einen Pointer auf diese Struktur an die andere Funktion übergeben? Oder?Ich habe das bis jetzt so probiert:
//Aufruf der Funktion:
durchsuchen(variabel);Die andere Funktion schaut so aus:
int durchsuchen(const void *arrayvariable)
{
VARIABEL_STRUCT *neu = (VARIABEL_STRUCT *)arrayvariable;neu->bszr;
return 0;
}Jetzt kann ich über neu->vsgr auf den Inhalt der ersten ArrayStruktur zugreifen. Nur wie auf die nächste?
Macht man das so oder wie sonst?
Noch einen schönen Tag
Vielen Dank
cu
George
-
Nein, macht man nicht so...
Warum void?
const nur wenn Du nichts verändern möchtest. (Durchsuchen also wohl const)
Da Du bei einem C-Array nicht weisst, wie groß es ist, musst Du die Größe extra übergeben.
Wenn Du etwas ändern willst, lässt Du natürlich das const weg (und gibst der Fkt. einen entsprechenden Namen).
z.B. so (mit const):int durchsuchen( const VARIABEL_STRUCT* arrayvariable, const int size) { for( int i = 0; i < size; ++i) { if( arrayvariable[i].vsgr == '0') { return i; } } return -1; }
-
Hallo
Vielen Dank - es geht :)))
Aber schon wieder ein nächstes Problem:
Die Struktur befindet sich in einer Header-Datei. Die Funktionsprototypen befinden sich auch in dieser Header-Datei.
Der Funktionsprototyp schaut so aus:
int durchsuchen(VARIABEL_STRUCT *, int);Es hagelt nur so von Fehlermeldungen, wenn der Prototyp in der Headerdatei steht, da er die Struktur nicht kennt. Binde ich den Prototypen in die Quellcodedatei ein, so geht alles wunderbar.
Wie muss man das machen? Geht das überhaupt?
Vielen Dank
cu
George
-
Die Headerdatei sollte etwa so aussehen:
typedef struct { char vsgr; char byat[3]; char vnzr[9]; char resv[12]; }VARIABEL_STRUCT; int durchsuchen(VARIABEL_STRUCT *, int);
Wenn das nicht geht, mal die Fehlermeldung posten.
-
Somit bedanke ich mich recht herzlich - du hast mir extrem geholfen:)) Vielen Vielen Dank
Noch einen sonnigen Nachmittag
cu
George