Frage zu einem Beispiel aus dem Tutorial - Struct
Verfasst: Di Jan 15, 2013 9:22 pm
Hallo!
ich habe eine Frage zu diesem Beispiel ( http://www.proggen.org/doku.php?id=c:tutorial:struct ):
Warum soll man einen Zeiger * weiterePersonen erstellen, der nicht auf meine Strukturvariable personen zeigt und danach noch so viel Platz für den Zeiger reservieren? Bei diesem Schritt wird ja automatisch im im Arbeitsspeicher Platz für 10x struct Person angelegt, egal ob wir diese nutzen oder nicht. Und man kann dann die Daten sofort an die Membervariablen übergeben, mit z.B.
Ich habe deshalb leider den Sinn von diesem Zeiger * weiterePersonen nicht verstanden.
Und dann gleich noch eine Frage zu free(). Wenn ich mit free() eine reservierte Zeiger-Adresse freigebe, dann kann ich danach trotzdem problemlos auf die Daten mittels diesem Zeiger zugreifen. Bedeutet das Wort Freigeben an dieser Stelle, dass die Daten irgendwann überschrieben werden können, aber nicht müssen?
EDIT: ich glaube, dass ich meine erste Frage selbst beantworten kann.
Mit dem Zeiger * weiterePersonen + malloc legen wir ein weiteres neues Array an, welches die selbe Größe besitzt wie unser Array personen vom Datentyp struct Person. Das sind aber zwei unterschiedliche Arrays mit unterschiedlichen Daten, richtig?
Dann hätte ich eine andere Frage:
Warum darf ich nicht statt:
folgendes machen bzw. warum funktioniert das nicht?
Vielen Dank!
ich habe eine Frage zu diesem Beispiel ( http://www.proggen.org/doku.php?id=c:tutorial:struct ):
Code: Alles auswählen
int main( void )
{
struct Person personen[10];
struct Person * weiterePersonen;
weiterePersonen = (struct Person*) malloc( 10 * sizeof( struct Person ));
if( weiterePersonen )
{
/* ... */
callByPointer( &weiterePersonen[0] );
free( weiterePersonen );
}
callByPointer( &personen[0] );
return 0;
}
Code: Alles auswählen
struct Person personen[10];
Code: Alles auswählen
strcpy( personen[9].firstName, "Hans2" );
Und dann gleich noch eine Frage zu free(). Wenn ich mit free() eine reservierte Zeiger-Adresse freigebe, dann kann ich danach trotzdem problemlos auf die Daten mittels diesem Zeiger zugreifen. Bedeutet das Wort Freigeben an dieser Stelle, dass die Daten irgendwann überschrieben werden können, aber nicht müssen?
EDIT: ich glaube, dass ich meine erste Frage selbst beantworten kann.
Mit dem Zeiger * weiterePersonen + malloc legen wir ein weiteres neues Array an, welches die selbe Größe besitzt wie unser Array personen vom Datentyp struct Person. Das sind aber zwei unterschiedliche Arrays mit unterschiedlichen Daten, richtig?
Dann hätte ich eine andere Frage:
Code: Alles auswählen
struct Person
{
char firstName[64];
char familyName[64];
unsigned int age;
struct Address mainAddress;
struct Address secondaryAddress;
};
Code: Alles auswählen
struct Address mainAddress;
Code: Alles auswählen
struct Address *mainAddress;
mainAddress = malloc(sizeof(struct Address));
Vielen Dank!