Deutsche Lernausgabe
Strukturen, typedef und der Operator -> in C
Gruppieren Sie zusammengehörige Daten und unterscheiden Sie Objekt- und Zeigerzugriffe.

struct definiert mehrere Felder. Der Punkt greift auf ein Objektfeld zu; -> greift über einen gültigen Zeiger zu. typedef erzeugt einen anderen Typnamen und reserviert selbst keinen Speicher.
Ein Strukturarray speichert aufeinanderfolgende Datensätze. Initialisieren Sie gelesene Felder und beachten Sie Zeichenpuffergrenzen. Eine Strukturkopie kopiert die Felder, ein Zeigerfeld verweist jedoch weiterhin auf dasselbe Objekt.
Der Compiler kann zur Ausrichtung Füllbytes einfügen: sizeof kann die Summe der Feldgrößen übersteigen. Betrachten Sie die rohe Darstellung nicht als portables Dateiformat.
Quellcode
#include <stdio.h>
#include <string.h>
// Typedef struct definition
typedef struct {
int id;
char name[32];
float gpa;
int credits;
} Student;
// Function taking pointer to struct (arrow operator ->)
void print_student(const Student *s) {
printf("ID: %-4d | Name: %-15s | GPA: %.2f | Credits: %d\n",
s->id, s->name, s->gpa, s->credits);
}
// Mutate struct via pointer
void update_gpa(Student *s, float new_gpa) {
s->gpa = new_gpa;
}
int main(void) {
// Array of structs
Student roster[] = {
{101, "Alice Chen", 3.92f, 48},
{102, "Bob Smith", 3.65f, 32},
{103, "Charlie Davis", 3.88f, 60}
};
int total = sizeof(roster) / sizeof(roster[0]);
printf("--- Engineering Class Roster ---\n");
for (int i = 0; i < total; i++) {
print_student(&roster[i]);
}
printf("\n--- Updating Bob's GPA via Pointer (Arrow ->) ---\n");
update_gpa(&roster[1], 3.82f);
print_student(&roster[1]);
return 0;
}Im Compiler öffnenErwartetes Ergebnis
--- Engineering Class Roster --- ID: 101 | Name: Alice Chen | GPA: 3.92 | Credits: 48 ID: 102 | Name: Bob Smith | GPA: 3.65 | Credits: 32 ID: 103 | Name: Charlie Davis | GPA: 3.88 | Credits: 60 --- Updating Bob's GPA via Pointer (Arrow ->) --- ID: 102 | Name: Bob Smith | GPA: 3.82 | Credits: 32
Häufige Fragen
Warum bleiben Code und manche Ausgaben englisch?
C-Schlüsselwörter, Bezeichner, Programmkommentare und erwartete Ausgaben bleiben wie im Original, damit der Code ausführbar und die Tests konsistent bleiben. Erklärungen und Aufgabenstellungen sind übersetzt.