DEV Community

Amirshokh
Amirshokh

Posted on

Язык программирования Си. Глава(Chapter) 10

  1. Одномерные и многомерные(multidimensional) массивы или массив массивов(array of arrays) и их многомерное представление, также их объявление(declaration) и инициализация(initialization) с использованием автоматической инициализации неинициализированных элементов нулями(если инициализирован хотя бы один элемент), списка(list) инициализации и назначенных(designated) инициализаторов в C99: const int days[][constvar] = {31, [5][1] = 31, 30, 31, [1] = 29};

  2. Индекс(с нуля) массива при инициализации должен быть константным целочисленным выражением(constant integer expression), состав производного(derived) типа, то есть массива(из скалярных(scalar) переменных) и границы(bounds), также поэлементное присваивание значений элементам массива(assigning array values), определение размера через sizeof(в байтах или элементах) и защита содержимого с помощью const

  3. Значение идентификатора массива(arr == &arr[0] и &arr[0][0] == arr[0]), указательная реализация массива(((arr + 3)+2) == arr[3][2]), адресуемость по байтам(byte addressable) компьютера и элемент массива, как единица хранения(storage unit)

  4. Передача одномерных и многомерных массивов как аргумент в сигнатуре функции(int foo(int [], int); или int foo(int [][constvar][constvar], int);), взаимозаменяемость(interchangeability) int * array и int array

  5. Тип(определение единицы хранения), значение(адрес первого байта объекта) и арифметика указателей(переход по объектам), ещё приоритет и ассоциативность операторов *(разыменование) и ++(инкрементирование): *ptr++ == *(ptr++)

  6. Операции(Operations) с указателями: присваивание(assignment), нахождение значения(value finding) или разыменование(dereferencing), взятие адреса(taking address), добавление и вычитание целого числа(adding and subtracting an integer), инкрементирование и декрементирование(incrementing and decrementing), разность(differencing) и сравнение(comparisons)

  7. const с формальными параметрами, указатель на константу(const int * ptr или int const * ptr) и константный указатель(int * const ptr), вдобавок опасность(UB) разыменования неинициализированного указателя(Dereferencing an Uninitialized Pointer)

  8. Указатель на указатель(pointer to pointer) пример двойной косвенности(double indirection), указатель на массив из нескольких элементов(int (* ptr)[n]), массив указателей(int * ptr[n]), совместимость указателей в ptrtofloat1 = ptrtofloat2 и небезопасность в С(Undefined Behavior), но не в С++(Error) присваивания константных неконстантным указателям(ptr = ptrtoconst) и присваивания вложенных(nested) указателей(ptrtoptrtoconst = &ptrtononconst; *ptrtoptrtoconst = &constvar; *ptrtononconst == constvar)

  9. Массивы переменной длины(variable-length array or VLA) имеют автоматический класс хранения, инициализируются только после объявления и поддерживаются в C99, но не обязательно в C11: передача как параметр функции(int foo(int rows, int columns, int arr[rows][columns]); или int foo(int, int, int[][]);) и простое объявление int m = 2, n = 3, (* arr[m])[n];

  10. Составные литералы(Compound Literals) будучи l-value и анонимными(не имеют идентификатора), сохраняются в памяти с автоматической или статической продолжительностью хранения и являются дополнением С99: (int[]){ 10, 20 * a, a + b }, (const char[5]){ "Hello" }

Язык программирования Си 6 издание. Стивен Прата
C Primer Plus 6th edition. Stephen Prata

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay