Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Освоение структур и указателей в C: практическое руководство

Освоение структур и указателей в C: практическое руководство

Узнайте, как использовать указатели для навигации по членам структур, и изучите динамическое выделение памяти для гибких структур данных в C.

Прежде чем погрузиться в указатели со структурами, ознакомьтесь с базовыми темами:


Использование указателей для ссылки на структуры

Ниже приведен краткий пример, показывающий, как объявить структуру и указатель, ссылающийся на нее.

struct Person {
    int member1;
    int member2;
    /* дополнительные члены */
};
int main(void) {
    struct Person *ptr, harry;
    /* ptr теперь может указывать на любой экземпляр Person */
}

В этом фрагменте ptr — указатель на экземпляр struct Person.


Пример: Доступ к членам структуры через указатель

Для чтения или записи полей структуры через указатель используйте оператор ->.

#include <stdio.h>
struct Person {
    int age;
    float weight;
};
int main(void) {
    struct Person *personPtr, person1;
    personPtr = &person1; /* указывает на person1 */
    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;
}

Здесь personPtr = &person1; сохраняет адрес person1 в personPtr. Последующий доступ через personPtr->field эквивалентен (*personPtr).field, предлагая лаконичный синтаксис.


Динамическое выделение памяти для структур

Когда количество экземпляров структуры заранее неизвестно, выделяйте память во время выполнения с помощью стандартной библиотеки C.

Пример: Выделение массива структур

#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;
}

Запуск программы дает:

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

Этот пример демонстрирует, как создать n экземпляров struct Person в куче, считать пользовательский ввод в каждый, а затем вывести результаты.

Язык C

  1. Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
  2. Классы и объекты в C#: Фундаменты надёжного ООП
  3. Абстрактные классы и методы в C#: практическое руководство
  4. Частичные классы и методы в C#: понимание и применение
  5. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  6. Понимание структур в C#: определение, использование и ключевые отличия
  7. Ключевые слова и идентификаторы в C: практическое руководство
  8. Освоение указателей в C: практическое руководство от экспертов
  9. Понимание взаимосвязи между массивами и указателями в C
  10. Передача адресов и указателей в функции в C: практическое руководство