ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Int summa(int a, int b){ int s; // s – локальная переменная a++; b++; s = a + b; return s; // возврат вычисленного значения } Внутри тела функции формальные параметры a и b увеличились на единицу, и сумма определяется при их новых значениях. При выходе из этой функции фактические (входные) параметры, соответствующие этим формальным параметрам, не изменятся. Таким образом, функция в Си вычисляет единственное значение, передаваемое вовне оператором return. При необходимости определить одной функцией значения нескольких переменных, в списке формальных параметров включаются не имена этих переменных, а их адреса (ссылки), а в теле функции используется операция разадресации (обращения по адресу) *. Создадим функцию, которая обменивает значениями две переменных: Void swap(int a, int b) { int temp; // temp – локальная переменная temp=a; // алгоритм циклического обмена a=b; b=temp; } Эта функция не производит никаких действий над фактическими параметрами, так как будут обмениваться значениями только формальные параметры: с чем пришел – с тем и ушел. Перепишем ее следующим образом: void swap(int *a, int *b) // используем значения переменных { // по адресам переменных a и b Int temp; temp=*a; // алгоритм циклического обмена *a=*b; // значениями, находящимися *b=temp; // по этим адресам } Эта функция использует не формальные параметры, а значения, находящиеся по адресам формальных параметров. Сами адреса переменных функцией не изменяются, как это и положено формальным параметрам. Меняются только значения, находящиеся по данным адресам, а эти значения не являются формальными параметрами. Хитро придумано! Обратимся к этой функции, например, из головной программы: Int x, y; x = 5; y = 3; swap(&x, &y); // используем адреса фактических переменных В этом случае переменные x и y обменяются своими значениями. Если в качестве формальных параметров используются имена массивов (строк), то в списке фактических параметров перед ними знаки амперсанда &не ставятся: имя массива в Си является адресом его первого элемента. Поэтому в функцию передается не массив со всеми значениями его элементов, а только адрес его первого элемента. Адреса всех остальных элементов вычисляются автоматически: void poplavok(int n, int vector[n]) { Не нашли, что искали? Воспользуйтесь поиском:
|