C-Structs und Zeiger meistern: Praxisleitfaden
C-Structs und Zeiger meistern: Praxisleitfaden
Entdecken Sie, wie Sie Zeiger nutzen, um auf Struct-Mitglieder zuzugreifen, und lernen Sie dynamische Speicherallokation für flexible C-Datenstrukturen.
Bevor Sie in Zeiger mit Structs eintauchen, machen Sie sich mit diesen grundlegenden Themen vertraut:
Zeiger verwenden, um auf Structs zu verweisen
Nachfolgend finden Sie ein prägnantes Beispiel, das zeigt, wie man ein Struct und einen Zeiger deklariert, der darauf verweist.
struct Person {
int member1;
int member2;
/* additional members */
};
int main(void) {
struct Person *ptr, harry;
/* ptr kann nun auf jede Person-Instanz zeigen */
}
In diesem Snippet ist ptr ein Zeiger auf eine struct Person-Instanz.
Beispiel: Auf Struct-Mitglieder über einen Zeiger zugreifen
Um Struct-Felder über einen Zeiger zu lesen oder zu schreiben, verwenden Sie den ->-Operator.
#include <stdio.h>
struct Person {
int age;
float weight;
};
int main(void) {
struct Person *personPtr, person1;
personPtr = &person1; /* auf person1 zeigen */
printf("Enter age: ");
scanf("%d", &personPtr->age);
printf("Enter weight: ");
scanf("%f", &personPtr->weight);
printf("\nDisplaying:\n");
printf("Age: %d\n", personPtr->age);
printf("Weight: %f", personPtr->weight);
return 0;
}
Hier speichert personPtr = &person1; die Adresse von person1 in personPtr. Der nachfolgende Zugriff über personPtr->field ist äquivalent zu (*personPtr).field und bietet eine prägnante Syntax.
personPtr->ageist dasselbe wie(*personPtr).agepersonPtr->weightist dasselbe wie(*personPtr).weight
Dynamische Speicherallokation für Structs
Wenn die Anzahl der benötigten Struct-Instanzen zur Kompilierzeit nicht bekannt ist, allokieren Sie Speicher zur Laufzeit mithilfe der C-Standardbibliothek.
Beispiel: Array von Structs allokieren
#include <stdio.h>
#include <stdlib.h>
struct Person {
int age;
float weight;
char name[30];
};
int main(void) {
struct Person *ptr;
int i, n;
printf("Enter the number of persons: ");
scanf("%d", &n);
ptr = (struct Person*)malloc(n * sizeof(struct Person));
if (!ptr) {
fprintf(stderr, "Memory allocation failed\n");
return EXIT_FAILURE;
}
for (i = 0; i < n; ++i) {
printf("Enter first name and age respectively: ");
scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
}
printf("\nDisplaying Information:\n");
for (i = 0; i < n; ++i) {
printf("Name: %s\tAge: %d\n", (ptr + i)->name, (ptr + i)->age);
}
free(ptr);
return 0;
}
Die Programmausführung ergibt:
Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32
Dieses Beispiel demonstriert, wie man n Instanzen von struct Person auf dem Heap erstellt, Benutzereingaben in jede einliest und dann die Ergebnisse anzeigt.
C Sprache
- C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C# Partielle Klassen und Methoden verstehen
- Versiegelte Klassen und Methoden in C# meistern
- C#-Structs verstehen: Definition, Verwendung und wesentliche Unterschiede
- C Schlüsselwörter & Bezeichner: Ein praktischer Leitfaden
- C-Zeiger meistern: Praxisnahes Experten-Tutorial
- Beziehung zwischen Arrays und Zeigern in C verstehen
- C-Programmierung: Adressen & Zeiger an Funktionen übergeben – Praxisleitfaden