Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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.


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

  1. C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
  2. C# Klassen & Objekte: Fundamente für robustes OOP
  3. C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
  4. C# Partielle Klassen und Methoden verstehen
  5. Versiegelte Klassen und Methoden in C# meistern
  6. C#-Structs verstehen: Definition, Verwendung und wesentliche Unterschiede
  7. C Schlüsselwörter & Bezeichner: Ein praktischer Leitfaden
  8. C-Zeiger meistern: Praxisnahes Experten-Tutorial
  9. Beziehung zwischen Arrays und Zeigern in C verstehen
  10. C-Programmierung: Adressen & Zeiger an Funktionen übergeben – Praxisleitfaden