Zeigerübergabe an
-
Hi,
ich möchte einen Zeiger von einer struct von der main an meine Funktion übergeben. Den Zeiger bearbeiten (Speicher reservieren)
und dann bei Rückkehr von der Funktion an die nächste Funktion übergeben.
Ich komme hier nicht klar ob ich nicht einen Zeiger auf einen Zeiger übergeben muss, wenn ja wie kann ich dann die einzelnen Felder im struct beschreiben ?Fragen über Fragen ?
Hier der Code:typedef struct { int mpi_adr; char typ; int db_nr; int byte_nr; int datenlaenge; int var_laenge; /* in Byte */ } block; int main(int argc, char *argv[]) { int blocknr, max_block; block *blockkennung; /*--------------------------------------------------------------------------------------------*/ /* Parameter-Datei einlesen */ while (1) { max_block = read_param(blockkennung); if (max_block <= 0) exit (-1); usw. } /*#################################################################*/ int read_param(block *blockkennung) { FILE *fp; char zeile[255]; int max_block; if ((fp = fopen("/home/peter/projekte/visual_sst/visual_sst/parameter", "r")) == NULL) { /* ERROR */ ; printf ("parameter-Datei konnte zum lesen für die Schnittstelle nicht geöffnet werden"); return -1; } max_block = 0; /* zeilenzähler aus der parameterdatei */ /* File komplett einlesen */ while ( fgets(zeile, sizeof(zeile), fp) ) { if (zeile[0] == '#' || strlen(zeile) == 0) { continue; } if (blockkennung == NULL || max_block <= 0) { if ((blockkennung = malloc(sizeof(block))) == NULL) { printf ("Speicherfehler in der Funktion \"read_param\""); return -1; } sscanf (zeile , "%i , %c , %i , %i , %i , %i" , &blockkennung[0].mpi_adr , &blockkennung[0].typ, &blockkennung[0].db_nr, &blockkennung[0].byte_nr, &blockkennung[0].datenlaenge, &blockkennung[0].var_laenge ); max_block++; } else { if ((blockkennung = realloc(blockkennung , ((max_block + 1) * sizeof(block)))) == NULL) { printf ("Speicherfehler in der Funktion \"read_param\""); return -1; } scanf (zeile , "%i , %c , %i , %i , %i , %i" , &blockkennung[max_block].mpi_adr , &blockkennung[max_block].typ, &blockkennung[max_block].db_nr, &blockkennung[max_block].byte_nr, &blockkennung[max_block].datenlaenge, &blockkennung[max_block].var_laenge ); max_block++; } } fclose (fp); return max_block; }
Danke
worst_case
-
So könntest Du auf die Elemente der Structur per Pointer zugreifen:
(*struct).element struct->element
Die zwei Zugriffsarten sind identisch, die letztere wird aber öfter verwendet.
Gruß
grottenolm
-
Hallo,
und Danke für die schnelle Reaktion.Je länger ich mich damit befasse um so weniger begreife ich.
Nochmals eine kurze Beschreibung:Ich möchte ein Array von Struct in einer Funktion erzeugen. Die Variable der Adresse wird aber in der main hinterlegt. Somit kann ich das Struct-Array auch einfach an andere Funktionen übergeben.
Mir ist nun nicht klar wie ich die Variable der Adresse (Struct wird ja erst in der Funktion erzeugt) an die Funktion übergebe und wie ich mittels z.B. "scanf" auf die einzelnen Felder des Struct zugreife/schreibe.
Bin für jeden Tip dankbar.
worst_case
-
du übergibst einfach die adresse deiner variablen an die funktion
bzw... im prinzip tust du das doch schon...und ne andere sache... versuche ne liste zu verwenden, ist um einiges effektiver als bei jedem neuen element dein komplettes struct array zu kopieren.