Программирование на C шаг за шагом: шаг 9 – структуры (structures)

 

C_logoСтруктуры в языке C – это специальные большие перменные, которые содержат внутри себя несколько именнованых переменных. Структуры так же являются базовой основой для объектов и классов в C++.

Структуры используются для:

  • сериализация данных;
  • передача множественных аргументов в и из фукнции через один аргумент;
  • структуры данных, такие как свзанные списки, двиочные деревья и другое.

Базовый пример структуры:

    struct point {
        int x;
        int y;
    };

Мы создаём структуру с именем point, которая содержит две переменных – x и y.

Теперь, попробуем использовать её. Предположим, у нас есть функция draw(), которая рисует точку на экране.

Без структуры нам понадобится использовать два аргумента – по одному для каждой координаты:

#include <stdio.h>

int main() {

    int x = 1;
    int y = 2;
    draw(x, y);
    return 0;
}

Используя структуры – мы можем передать координаты в виде одного аргумента:

#include <stdio.h>

int main() {

 struct point p;
 p.x = 10;
 p.y = 5;
 draw(p);

return 0;
}

Для доступа к переменным структуры используется оператор “.“.

Печать из структур

Используем такой код:

#include <stdio.h>

struct st { // создаём структуру st;
    int a;  // и определяем две переменные в ней;
    int b;
};

int main() {

    struct st o;  // объявляем структуру st, как переменную o;

    o.a = 1;  // инициализируем перменную a структуры st, и задаём ей значение 1;
    o.b = 2;

    printf("A: %d, B: %dn" , o.a, o.b); // выводим на экран переменные структуры;

    return 0;
}

Результат:

$ ./struct_1
A: 1, B: 2

Определение типов

Определение типов (typedef) позволяет задавать новые имена различным типам данных (не только структур), что может быть полезным при работе со структурами и указателями.

Так мы можем избавиться от длинного определения структуры point, которую мы создали ранее. Что бы не использовать ключевое слово struct каждый раз, когда мы хотим определить новую структуру point – можно использовать такой код:

typedef struct {
   int x;
   int y;
} point;

Он позволит нам выполнить объявление новой структуры так:

point p;

Структуры так же могут содержать указатели, что позволяет хранить строки или указатели на другие структуры.

Например, мы можем определить структуру st так:

typedef struct {
 char * a;
 int b;
} st;

Так как a – указатель типа char, тип st может содержать строку.

Изменим наш предыдущий код:

#include <stdio.h>

/*
struct st {
    int a;
    int b;
};
*/

typedef struct {
    char * a;
    int b;
} st;

int main() {
    st o;
//    struct st o;
    o.a = "word";
//    o.a = 1;
    o.b = 2;

    printf("A: %s, B: %dn" , o.a, o.b);

    return 0;
}

По теме

http://cppstudio.com

http://www.c-cpp.ru

https://ru.wikipedia.org

http://www.tutorialspoint.com