Рубрики

Структуры в С

Что такое структура?
Структура — это определенный пользователем тип данных в C / C ++. Структура создает тип данных, который можно использовать для группировки элементов, возможно, разных типов в один тип.

Как создать структуру?
Ключевое слово struct используется для создания структуры. Ниже приведен пример.

struct address

{

   char name[50];

   char street[100];

   char city[50];

   char state[20];

   int pin;

};

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

// Объявление переменной с объявлением структуры.

struct Point

{

   int x, y;

} p1;  // переменная p1 объявлена с 'Point'

  

  
// Объявление переменной как базовые типы данных

struct Point

{

   int x, y;

}; 

  

int main()

{

   struct Point p1;  // Переменная p1 объявлена как обычная переменная

}

Примечание: в C ++ ключевое слово struct является необязательным перед объявлением переменной. В Си это обязательно.

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

struct Point

{

   int x = 0;  // ОШИБКА КОМПИЛЕРА: здесь невозможно инициализировать элементы

   int y = 0;  // ОШИБКА КОМПИЛЕРА: здесь невозможно инициализировать элементы

}; 

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

Элементы структуры могут быть инициализированы с помощью фигурных скобок '{}'. Например, следующее является действительной инициализацией.

struct Point

{

   int x, y;

}; 

  

int main()

{

   // Действительная инициализация. член x получает значение 0 и y

   // получает значение 1. Порядок объявления соблюдается.

   struct Point p1 = {0, 1}; 

}

Как получить доступ к элементам структуры?
Доступ к членам структуры осуществляется с помощью оператора точка (.).

#include<stdio.h>

  

struct Point

{

   int x, y;

};

  

int main()

{

   struct Point p1 = {0, 1};

  

   // Доступ к членам точки p1

   p1.x = 20;

   printf ("x = %d, y = %d", p1.x, p1.y);

  

   return 0;

}

Выход:

x = 20, y = 1

Что обозначено как инициализация?
Назначенная инициализация позволяет инициализировать элементы структуры в любом порядке. Эта функция была добавлена в стандарт C99 .

#include<stdio.h>

  

struct Point

{

   int x, y, z;

};

  

int main()

{

   // Примеры инициализации с использованием обозначенной инициализации

   struct Point p1 = {.y = 0, .z = 1, .x = 2};

   struct Point p2 = {.x = 20};

  

   printf ("x = %d, y = %d, z = %d\n", p1.x, p1.y, p1.z);

   printf ("x = %d", p2.x);

   return 0;

}

Выход:

x = 2, y = 0, z = 1
x = 20

Эта функция недоступна в C ++ и работает только в C.

Что такое массив структур?
Как и другие примитивные типы данных, мы можем создать массив структур.

#include<stdio.h>

  

struct Point

{

   int x, y;

};

  

int main()

{

   // Создать массив структур

   struct Point arr[10];

  

   // Доступ к членам массива

   arr[0].x = 10;

   arr[0].y = 20;

  

   printf("%d %d", arr[0].x, arr[0].y);

   return 0;

}

Выход:

10 20

Что такое структурный указатель?
Как и примитивные типы, мы можем иметь указатель на структуру. Если у нас есть указатель на структуру, доступ к членам осуществляется с помощью оператора стрелки (->).

#include<stdio.h>

  

struct Point

{

   int x, y;

};

  

int main()

{

   struct Point p1 = {1, 2};

  

   // p2 - указатель на структуру p1

   struct Point *p2 = &p1;

  

   // Доступ к элементам структуры с помощью указателя структуры

   printf("%d %d", p2->x, p2->y);

   return 0;

}

Выход:

1 2

Что такое выравнивание элементов конструкции?
Смотрите http://espressocode.top/structure-member-alignment-padding-and-data-packing/

Ограничения структур C

На языке Си Structures предоставляет метод для объединения данных разных типов. Структура — это полезный инструмент для обработки группы логически связанных элементов данных. Однако структуры C имеют некоторые ограничения.

  • Структура C не позволяет обрабатывать тип данных struct как встроенные типы данных:
  • Мы не можем использовать такие операторы, как +, — и т. Д. Для переменных структуры. Например, рассмотрим следующий код:

    struct number

    {

        float x;

    };

    int main()

    {

        struct number n1,n2,n3;

        n1.x=4;

        n2.x=3;

        n3=n1+n2;

        return 0;

    }

      
    /*Выход:

      
    prog.c: в функции 'main':
    prog.c: 10: 7: ошибка:
    недопустимые операнды в двоичном + (имеют «struct number» и «struct number»)

      n3 = n1 + n2;

      
    * /

  • Нет скрытия данных: C Структуры не позволяют скрывать данные. Члены структуры могут быть доступны любой функции в любом месте области действия структуры.
  • Функции внутри структуры: структуры C не разрешают функции внутри структуры
  • Статические члены: C Структуры не могут иметь статические элементы внутри своего тела.
  • Модификаторы доступа: C Язык программирования не поддерживает модификаторы доступа. Поэтому они не могут быть использованы в структурах Си.
  • Создание конструкции в структуре: структуры в C не могут иметь конструктора внутри структур.
  • Связанная статья: C структуры против C ++ структур

    Вскоре мы обсудим объединение и другие связанные со структурой темы на C. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

    Рекомендуемые посты:

    Структуры в С

    0.00 (0%) 0 votes