Лекция - Си
.pdfАвтоматический класс памяти
(Для локальных переменных)
Локальные переменные — переменные, созданные внутри функции.
//Вычисление квадрата числа.
//Переменная-аргумент тоже относится к авт. классу int square (int a)
{
//Локальная переменная (автом. класс памяти) const int b = a*a;
return b;
}
Свойства:
- существуют пока выполняется функция; - доступны напрямую только внутри функции после
определения переменной;
11
Статический класс памяти
а) Для локальных переменных
int getNextNumber(void)
{
// Локальная переменная (статический класс памяти) static int number = 0; // иниц-ия однократная number = number + 1;
return number;
}
Свойства:
-существуют пока выполняется программа;
-однократно инициализируются;
-доступны напрямую только внутри функции;
12
Статический класс памяти
б) Для глобальных переменных
Глобальные переменные — переменные, созданные вне функций.
// Глобальная переменная статического класса памяти static bool interruptCompleted = false;
void interruptHandler(void)
{
interruptCompleted = true;
}
Свойства:
-существуют пока выполняется программа;
-однократно инициализируются;
-доступны напрямую только из файла, в котором
определены; |
13 |
Внешний класс памяти
Для глобальных переменных
// файл first.c
int mode = 0; // Глоб. переменная внешнего класса п. void changeMode(void)
{
mode = mode + 1;
}
---------------------------------------------------
//файл second.c
//Объявление переменной, созданной в другом файле
extern int mode; void checkMode(void)
{
if (mode == 1)
{
...
} |
} |
14 |
|
||
|
|
Функции
Функция = подпрограмма;
-имя;
-аргументы;
-возвращаемое значения;
-тело функции;
аргумент1
аргумент2
аргументN
аргумент1
аргумент2
аргументN
нет
аргументов
Функция
Функция
Функция
возвращаемое значение
нет
возвращаемого
значения
возвращаемое значение
15
Объявление функции = тип возвращаемого значения + имя + типы аргументов (без тела функции):
-сообщает компилятору о наличии такой функции;
-выражение, объявляющее функцию называется прототипом функции (сигнатурой функции);
-используется, когда функция определяется по тексту ниже, чем вызывается;
Определение функции — указание функции целиком вместе с телом;
// Объявление функции:
тип_возвр_значения имя (список_аргументов);
// Определение функции: тип_возвр_значения имя (список_аргументов)
{
|
... // тело функции |
|
} |
return <возвращаемое значение>; |
16 |
|
||
|
|
Функции. Примеры
// Объявление функции
unsigned getButtonNumber(void);
// Функция вычисления среднего из 2х чисел double getMean(double a1, double a2)
{
return (a1 + a2) / 2;
}
int main(void) // Отсюда начинается выполнение программы
{
const unsigned int button = getButtonNumber(); const double mean = getMean(2.5, 35.85);
}
// Получить номер нажатой кнопки unsigned getButtonNumber(void)
{
unsigned buttonNumber = 0;
... // Определение номера нажатой кнопки return buttonNumber;
} |
17 |
Передача аргументов в функции
-Аргументы функции внутри неё – локальные переменные (автом. класс памяти);
-Аргументы передаются в функции копированием;
-Возвращаемое значение передаётся копированием;
// Функция вычисления суммы 2х чисел |
|
int foo(int a, int b) |
|
{ |
|
int c = a + b; |
|
a = 0; b = 0; |
|
return c; |
|
} |
|
int main (void) |
|
{ |
|
int a = 5; |
|
int b = 10; |
|
int aPlusb = foo(a, b); |
|
// Переменные не изменились после вызова функции: |
|
// a равно 5; b равно 10 |
18 |
} |
|
Указатели
Указатель – переменная, хранящая адрес другой переменной;
Указатель:
-тип;
-адрес;
Особенности:
-хранит адрес переменной, а не её значение;
-особенности арифметических операций (+,-);
-может быть нулевым (NULL);
19
Указатели - примеры
тип * имя → указатель
#include <stddef.h> // Необх. для использования NULL
// Указатель на переменную типа int
int *pointer = NULL; // NULL — спец. Значение ("нулевой")
//Указатель на переменную типа unsigned char unsigned char *buffer;
//Указатель на переменную типа char, через
//который нельзя изменить эту переменную const char *arrayPtr;
20