Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

Язык си ( c ) — typedef struct

Обращаться в языке си ( c ) к элементам структуры можно двумя способами:

  1. через операцию-точку
  2. Да, да - обычная точка, которая в языке Си ( c ) выполняет операцию доступа к элементам. Вот пример:

    struct foot_klub {
       char name[20];
       int liga;
       float ochki;
    };

    int main(){
       struct foot_klub a = {"CSKA", 1, 24.5 };

       printf ("%d",a.liga); /* вывод значения элемента liga                             структуры foot_klub */
       a.liga = 2; //присваиваем элементу новое значение
    return 0;
    }

  3. через операцию-стрелку
  4. Обозначение: '->'. Различия заключаются в том, что операцию-точку мы используем, когда дело имеем с переменной, а операцию-стрелку - когда дело имеет с указателем на переменную. Вот пример:

    struct foot_klub *ptr = &a;
    printf ("%.1f", ptr->ochki);

    Не забывайте ставить знак взятия адреса (&) перед именем структуры, так как имя структуры не является указателем. Можно обратиться еще вот так:

    printf ("%.1f", (*ptr).ochki);

    Но при таком обращении не забывайте брать в скобки (*ptr), т.к. операция доступа имеет более высокий приоритет по сравнению с операцией разыменования.

передача структур в функцию

Раз структура является типом данных, только созданным нами, то с ней можно делать абсолютно такие же взаимодействия, как и с встроенными типами. Давайте рассмотрим работу структур (struct) с функциями поподробнее:

  1. структуру можно передавать целиком:
  2. void f(struct foot_klub str){
       printf ("%s %d %.1f", str.name, str.liga, str.ochki);
    }

  3. можно передать указатель на структуру:
  4. void d (struct foot_klub *p){
       p->ochki = 12;
    }

  5. можно передать элементы структуры:
  6. void e (int i, float f){
       printf ("liga: %d; ochki: %.1f"i, f);
    }

    struct foot_klub a = {"CSKA", 1, 24.5 };
    e(a.liga, a.ochki);

При передаче самой структуры или ее элементов передаются значения. Т.е. при изменении элементов структуры в функции, настоящие элементы останутся нетронутыми. Для того, что бы при передаче мы передавали настоящие элементы, нужно передавать в функцию структуру или с помощью указателей или с помощью ссылок.

   typedef

Думаю, у вас уже возникал вопрос: А можно ли объявлять переменные структуры без специально слова struct в языке си ( c )? Ответом на этот вопрос является наш подзаголовок. typedef позволяет объявить синоним нашей переменной. Вот пример использования ключевого слова typedef в языке си ( c ):

typedef struct foot_klub f_club;
f_club a, *p, b[5];

Т.е. мы заменили struct foot_klub синонимом f_club, что в разы облегчает понимание кода. Большинство программистов на языке си ( с ) используют typedef сразу при объявлении структуры, что заметно уменьшает код. Вот пример:

typedef struct {
   char name[20];
   int liga;
   float ochki;
}f_club;

Т.е. при объявлении вместе двух ключевых слов - typedef struct, мы сразу создаем тип f_club. Теперь для объявления переменной созданного типа достаточно всего-навсего воспользоваться одним словом. С основами разобрались!

Предвидущие уроки:

  1. Инициализация структуры

Следующие уроки:

  1. Объединение | Перечислимый тип данных
При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru