Лекция-СИ_6_рус.ppt
- Количество слайдов: 37
Функции в языке Си Лектор Махметова А. М.
Вопросы: • Указатели • Функции пользователя • Атрибуты переменных
Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например адрес другой переменной. Через указатель, установленный на переменную можно обращаться к участку оперативной памяти, отведенной компилятором под ее значения.
Указатель объявляется следующим образом: тип *идентификатор; Пример: int *xptr, x; float *yptr, *sptr;
С указателями связаны две унарные операции: & и *. Операция & означает «взять адрес» операнда (т. е. установить указатель на операнд). Данная операция допустима только над переменными.
Операция * : «значение, расположенное по указанному адресу» и работает следующим образом: - Определяется местоположение в оперативной памяти переменной типа указатель. - Извлекается информация из этого участка памяти и трактуется как адрес переменной с типом, указанным в объявлении указателя. - Производится обращение к участку памяти по выделенному адресу для проведения некоторых действий.
Пример 1: int x, /* переменная типа int */ *y; /* указатель на элемент данных типа int */ y=&x; *y=1; /* y - адрес переменной x */ /* косвенная адресация указателем поля x /* “по указанному адресу записать 1”, т. е. x=1; */
Пример 2: int i, j=8, k=5, *y; y=&i; *y=2; /* i=2 */ y=&j; /* переустановили указатель на переменную j */ *y+=i; /* j+=i , т. е. j=j+i → j=j+2=10 */ y=&k; /*переустановили указатель на переменную k */ k+=*y; /* k+=k, k=k+k = 10 */ (*y)++; /* k++, k=k+1 = 10+1 = 11 */
//operasi & * #include
ФУНКЦИЯ Функция - это самостоятельная единица программы, спроектированная для реализации конкретной задачи. Вызов функций приводит к выполнению некоторых действий. Например, при обращении к функции printf() осуществляется вывод данных на экран.
Предварительно функцию необходимо объявить. Объявление функции пользователя возможна в двух формах: -в форме описания; - в форме определения (реализации).
Описание функции – декларация ее прототипа вначале программного файла. Используется следующий способ декларации функций: <тип_результата> <имя_функции>(<тип> <переменная>, …<тип> <переменная>);
Полное определение функции имеет следующий вид: <тип_результата> <имя_функции>(список параметров) { код функции }
Оператор return вызывает немедленный выход из данной функции и возврат в вызывающую ее функцию. Оператор return также используется для возврата результата работы функции. Теле функции может быть несколько операторов return, но может и не быть ни одного. В таких случаях возврат в вызывающую ее функцию происходит оператора. после выполнения последнего
// вычислить квадраты чисел от 1 до 10 #include
// Определить наибольшее из трех чисел #include
int maximum(int x, int y, int z) { int max=x; if (y>max) max=y; if (z>max) max=z; return max; }
#include
#include
Атрибуты переменных Имя переменной; Тип переменной; Значение переменной; Класс памяти; Время хранения; Область действия.
Классы памяти языка Си дают возможность определить, с какими функциями связаны какие переменные, и как долго переменная сохраняется в программе. Имеются 4 вида классов памяти: auto - автоматический - локальные идентификаторы, память для которых выделяется при входе в блок, т. е. составной оператор, и освобождается при выходе из блока.
static - статический - локальные идентификаторы, существующие в процессе всех выполнений блока. В отличие от идентификаторов типа auto, для идентификаторов типа static память выделяется только один раз - в начале выполнения программы, и они существуют, пока программа выполняется.
extern - внешний - используются для связи между функциями, в том числе независимо скомпилированными функциями, которые могут находиться в различных файлах. Память, ассоциированная с этими идентификаторами, является постоянной, однако ее содержимое может меняться. Эти идентификаторы описываются вне функции.
register - регистровый - идентификаторы, подобные идентификаторам типа auto. Их значения, если это возможно, должны помещаться в регистрах машины для обеспечения быстрого доступа к данным. Если класс памяти идентификатора не указан явно, то его класс памяти задается положением его определения в тексте программы. Если идентификатор определяется внутри функции, тогда его класс памяти auto, в остальных случаях идентификатор имеет класс памяти extern.
Область действия переменных Область действия переменной – это правила, которые устанавливают, какие данные доступны из текущего места программы. Имеются три типа переменных: • Глобальный; • Локальный; • Формальный.
Глобальные переменные объявляются вне какойлибо функции. Глобальные переменные могут быть использованы в любом месте программы, но перед их первым использованием они должны быть объявлены и проинициализированы. Область действия глобальных переменных - вся программа с момента их объявления.
Область действия локальных переменных – это те блоки, где локальные переменные объявлены. При выходе из блокальная переменная и ее значение теряются. Формальные переменные – это параметры в заголовке функции пользователя. Формальные параметры используются в теле функции так же, как локальные переменные. Область действия формальных параметров – блок, являющийся телом функции.
Время хранения переменных Спецификаторы класса памяти по времени хранения делятся на два типа: Автоматическое время хранения; Статическое время хранения.
Для описания переменных с автоматическим временем хранения используются спецификаторы auto и extern. Это формальные и локальные переменные. Для описания переменных со статистическим временем хранения используются спецификаторы static и register. Это локальные и глобальные переменные.
#include
void f 1(void) { int a=25; printf ("n a=%dn", a); a++; ("n a=%dn", a); } printf void f 2(void) { static int a=75; printf ("n static a=%dn", a); a++; printf ("n static a=%dn", a); } void f 3(void) { printf ("n global a=%dn", a); a*=10; printf ("n global a=%dn", a); }
# include
#include
main() { int i, j; randomize(); for(i=0; i
#include


