
- •Программа на с, включение заголовочных файлов стандартной библиотеки и разработанных пользователем. Именованные константы и макроопределения. Идентификаторы.
- •Типы данных (скалярные, составные). Размер памяти основных типов данных. Модификатор const.
- •Константы (целые, с плавающей точкой, символьные, строковые). Управляющие (Эскейп) последовательности.
- •Операторы с. Назначение. Условные выражения.
- •Функции. Объявление и определение функций, их отличие. Классы памяти и области действия функций. Типы возвращаемых значений. Формальные и фактические параметры. Вызов функции.
- •Объявление переменной. Классы памяти переменных. Области действия и время "жизни".
- •Массивы. Одномерные. Многомерные. Объявление. Инициализация. Использование индексных выражений для доступа к элементам массива.
- •Указатели. Объявление. Использование. Приведение типов для указателей на void. Операции над указателями.
- •Операции. Унарные операции. Бинарные. Тернарная. Присваивания. Приведение типов.
- •Структуры. Объявление. Выбор элементов структуры. Использование указателей на структуры.
- •Объединения. Их объявление.
Объявление переменной. Классы памяти переменных. Области действия и время "жизни".
Для хранения различных данных в языках программирования используют переменные. Переменной называется область памяти, имеющая имя, которое иначе называют идентификатором.
Пример объявления переменных
int a; // объявление переменной a целого типа.
float b; // объявление переменной b типа данных с плавающей запятой.
double c = 14.2; // инициализация переменной типа double.
char d = 's'; // инициализация переменной типа char.
bool k = true; // инициализация логической переменной k.
При объявлении переменной компилятор отводит ей место в памяти в зависимости от её типа. Стандартными средствами AVR GCC работает с типами данных char (символьный тип) и int(целочисленный тип).
Глобальные переменные:
Переменная, объявленная на внешнем уровне, имеет глобальное время жизни.
Локальные переменные:
Переменная, объявленная на внутреннем уровне, доступна только в том, блоке в котором она объявлена, независимо от класса памяти
Массивы. Одномерные. Многомерные. Объявление. Инициализация. Использование индексных выражений для доступа к элементам массива.
Массив – это тип данных, представляющий собой ограниченный набор упорядоченных элементов одного и того же типа, имеющих одно и то же имя.
Одномерные массивы
Как и другие переменные, массив должен быть объявлен. Существует несколько способов объявления массива.
Общая форма объявления одномерного массива имеет следующий вид:
<класс> тип имя [размер]
Таким образом, элементами массива, состоящего из N элементов, являются переменные с индексами
a[0],a[1],…,a[N–1]
Стандартом C определены многомерные массивы. Простейшая форма многомерного массива – двумерный массив, т. е. массив одномерных массивов.
Описание двумерного массива выглядит следующим образом:
<класс> тип имя [N1] [N2];
где N1,N2 – количество строк и столбцов.
Массив в памяти располагается по строкам:
ID[0][0],…,ID[0][N2–1],
…
ID[N1–[0],…,ID[N1–1][N2–1], где ID – имя массива.
Ниже приведены примеры объявления массивов:
1 2 3 4 |
int arr[100]; int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char ch[] = {'R','u','b','y','D','e','v','.','r','u'}; char ch2[] = "RubyDev.ru"; |
После имени переменной ссылающейся на массив мы в квадратных скобках указываем индекс (еще его называют ключом) элемента
Для доступа к элементам массива существует два различных способа. Первый способ связан с использованием обычных индексных выражений в квадратных скобках, например, array[16]=3 или array[i+2]=7.
Второй способ доступа к элементам массива связан с использованием адресных выражений и операции разадресации в форме *(array+16)=3 или *(array+i+2)=7. При таком способе доступа адресное выражение равное адресу шестнадцатого элемента массива тоже может быть записано разными способами *(array+16) или *(16+array).
При реализации на компьютере первый способ приводится ко второму, т.е. индексное выражение преобразуется к адресному. Для приведенных примеров array[16] и 16[array] преобразуются в *(array+16).