русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Передача параметров в функцию


Дата добавления: 2013-12-23; просмотров: 904; Нарушение авторских прав


Оператор return

Этот оператор имеет два варианта применения:

1. Если некоторая функция возвращает некоторый результат (значение) в точку вызова, то в тексте функции должен обязательно быть оператор вида

return (выражение);

(круглые скобки здесь не обязательны).

Пример 5.1: Функция нахождения большего из двух чисел.

int max (int a, int b);

{

if (a > b)

return (a);

else

return (b);

}

Можно еще короче:

int max (int a, int b);

{

if (a > b) return (a);

return (b);

}

А можно использовать оператор “?”:

max (int a, int b);

{

return (a > b)? a : b ;

}

Если функция не возвращает никакого значения, она может также заканчиваться оператором return.

Отсутствие этого оператора не вызывает никаких неприятностей, т.к. при достижения закрывающей скобки ‘}’ компилятор автоматически генерирует код возврата.

2. Если требуется возврат в точку вызова до исполнения всех операторов тела функции в результате выполнения какого – либо условия. Например,

{

if (ch = =’\0’)

return 0;

}

 

Часто требуется, чтобы одна функция изменяла значения переменных, относящихся к другой функции. Предположим, что у нас имеются две переменные x и y, и мы хотим, чтобы они обменялись своими значениями. Схематически такой обмен представлен на рис 5.1.

2

 

       
 
X
 
Y


 

       
   
 
 

 


1 3

 
 

 

 


Рис.5.1

 

Для обмена двумя значениями вводится временная переменная temp, согласованная по типу с переменными x и y.

Последовательность операций здесь следующая:

temp = x;

x = y;

y = temp;

Рассмотрим программу, реализующую обмен конкретными значениями.



Пример 5.2. Программа обмен

#include <stdio.h>

void obmen( int, int); // Прототип функции

void main ( void)

{

int x = 5, int y = 20;

printf (“ x = %d y = %d”, x, y);

obmen ( x, y); // Вызов функции

printf (“После обмена : x = %d y = %d”, x, y);

}

// Описание функци

void obmen( int a, int b);

{

int temp;

temp = a;

a = b;

b = temp;

}

На входе программы a и b получили значения x и y, но на выход результат не передавался и значения внешних переменных x и y не изменились.

Результат работы программы будет выглядеть следующим образом:

x = 5 y = 20.

После обмена значениями: x = 5 y = 20, т.е. значения переменных не поменялись местами. Это произошло потому, что по правилам языка Си параметры функции являются параметрами - значениями. Это означает, что в момент обращения к функции, ей в качестве фактических параметров передаются не сами переменные, а их копии в виде значений, которые они имеют в данный момент.

Изменение значений локальных переменных a и b никак не сказывается на значениях x и y. Это совершенно различные переменные.

Каким же образом все - таки поменять значения переменных x и y в программе? Для этого следует использовать указатели. Почему? Потому что указатель – это адрес переменной, следовательно, используя указатель можно осуществлять доступ к самой переменной. Значение указателя и в вызывающей программе и в функции, которой это значение передано, указывает на одну и ту же переменную.

Как будет выглядеть правильная программа? Запишем ее.

Пример 5.3.

# include <stdio.h>

void obmen (int*, int*);

void main(void)

{

int x = 5, y = 20;

printf (…);

obmen (&x, &y); //адрес x, y = указателю на a и b.

printf (“ x = %d y = %d”, x, y);

}

void obmen (int*a, int*b)

{

int temp;

temp = *a; //разадресация, т.е. берется значение по адресу

*a = *b;

*b = temp;

}

Теперь программа будет работать правильно.

Декларация void obmen (int*, int*)

говорит о том, что в качестве аргументов в функцию obmen () следует передать указатели (адреса). Вот почему при вызове функции в качестве фактических параметров используют &x и &y, т.е.:

obmen (&x, &y).

 



<== предыдущая лекция | следующая лекция ==>
Типовая структура программы на языке СИ | Массивы и функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.