Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Часто требуется, чтобы одна функция изменяла значения переменных, относящихся к другой функции. Предположим, что у нас имеются две переменные 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).

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.