Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция - Си

.pdf
Скачиваний:
67
Добавлен:
18.05.2014
Размер:
431.24 Кб
Скачать

Указатели.

Получение адреса переменной. Разыменование указателя.

Получение адреса переменной — формирование указателя, хранящего адрес этой переменной

&переменная

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