Лекция - Си
.pdfУказатели.
Получение адреса переменной. Разыменование указателя.
Получение адреса переменной — формирование указателя, хранящего адрес этой переменной
&переменная
int a = 5;
int *pointer_to_a;
pointer_to_a = &a; // Инициализация указателя // адресом переменной 'a'
Разыменование — получение доступа к значению переменной, на которую ссылается
указатель.
*указатель
*pointer_to_a = 10; // Изменение исходной переменной |
|
// через указатель |
21 |
|
|
|
|
|
|
|
|
|
|
Указатели |
|||||||||||||
|
int a; |
|
|
int b; |
|
|
|
int *ptr = &a; |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00 |
A0 |
00 |
00 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0xA000 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
0xA000 |
0xA004 |
|
|
|
|
||||||||||||||||||
0x1B00 |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
int a = 5; |
|
|
|
int b = 10; |
|
|
|
int *ptr; |
// |
Создание указателя на переменную типа int |
|
ptr = &a; |
// |
Инициализация указателя адресом перем. 'a' |
|
*ptr = 20; |
// |
Меняем значение 'а' через указатель; |
|
b = *ptr; |
// |
Считываем значение 'a' через указатель; |
|
ptr = &b; |
// |
Связываем указатель с другой переменной; |
|
ptr = NULL; // |
«Нулевой указатель» - ни с чем не связан. |
||
*ptr = |
8; |
// Нельзя для нулевого указателя! |
22
Операторы
Арифметические
=приравнивание
–вычитание
+сложение
* умножение
/деление
Логические |
Побитовые |
|
|
логические |
|
|
|
|
&& |
& |
И |
|
|
|
|| |
| |
ИЛИ |
|
|
|
! |
~ |
НЕ |
|
|
|
|
^ |
ИСК. ИЛИ |
|
|
|
Операторы сравнения |
|
|
|
|
|
|
|
== |
проверка на равенство |
равно ли? |
|
!= |
проверка на неравенство |
не равно? |
|
> |
больше |
|
|
< |
меньше |
|
|
<= |
меньше или равно |
|
23 |
>= |
больше или равно |
|
Арифметические операторы
int a; int b;
a = 10; // присваивание (приравнивание) b = 2;
int c = a + b; // сложение int d = a — b; // вычитание int e = a * b; // умножение int f = a / b; // деление
++a; // инкремент (a = a + 1) --a; // декремент (a = a — 1)
int |
g |
= |
-a; |
// |
унарный |
минус |
int |
h |
= |
10 % 3; |
// |
остаток |
от целочисленного деления, h=1 |
24
Логические операторы
bool a = true; |
|
bool b = false; |
|
bool с = a && b; |
// лог. И |
bool d = a || b; |
// лог. ИЛИ |
bool notA = !a; |
// лог. НЕ |
int value = 20; |
|
bool V = !value; |
// целые числа легко преобразуются |
bool Y = value; |
// в логический тип |
|
25
Побитовые логические операторы
const unsigned char a = 0x04; const unsigned char b = 0x06;
unsigned char с = a & b; unsigned char d = a | b; unsigned char notA = ~a;
unsigned char E = a ^ b;
//побитовое лог. И
//побитовое лог. ИЛИ
//побитовое лог. НЕ
//побитовое лог. ИСКЛ ИЛИ
unsigned char ShiftedLeft = a << 2; // сдвиг влево unsigned char ShiftedRight = b >> 1;// сдвиг вправо
26
Операторы сравнения
Результат сравнения — логический (тип bool, значения true или false)
int a = 20; int b = 30;
bool f = a |
== b; |
// 'a' равно 'b'? |
||
bool f1 = a != b; |
// 'a' не равно 'b'? |
|||
const bool a_greater_than_b = a > b; |
||||
bool c |
= |
a <= b; |
|
|
bool d |
= |
(a >= b) || (a > 1000); |
27
Управление выполнением
(ветвление), условные операторы
Условные операторы:
-для реализации ветвлений;
-работают с логическими типами;
int getPressedButtonIndex();
int main()
{
unsigned int button = getPressedButtonIndex(); if (button == 0) // если button равно 0
{
...
}
else if (button > 2) // иначе, если button больше 2
{
...
}
else // иначе
{
} |
... |
28 |
|
} |
|
Циклы
Цикл — многократно повторяемый фрагмент программы
-тело цикла;
-условие работы цикла;
Виды циклов:
-цикл с предусловием;
-цикл с постусловием;
-цикл со счётчиком;
29
Цикл с предусловием
Тело цикла выполняется 0 или более раз
while (условие) 'while' — 'пока'
{
тело_цикла
}
int counter = 1000; while ( counter > 0)
{
// что-то делаем
--counter; // counter = counter - 1
}
//Объявление функции, которая проверяет, завершено
//ли аналого-цифровое преобразование
bool isAdcCompleted(void); |
|
while (!isAdcCompleted()); // Пустое тело цикла |
30 |
|