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

Лекция - Си

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

Автоматический класс памяти

(Для локальных переменных)

Локальные переменные — переменные, созданные внутри функции.

//Вычисление квадрата числа.

//Переменная-аргумент тоже относится к авт. классу 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