Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Wait(12)




Else

return b;

}

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

Количество аргументов и их типы должны совпадать со списком параметров в прототипе и заголовке функции. Например, если объявлено, что функция принимает 2 аргумента типа int, то в неё следует передавать именно 2 аргумента типа int. Каждый аргумент может быть любым выражением на языке С: константой, переменной, арифметическим или логическим выражением или даже вызовом другой функции.

 

Вызов функции можно осуществить двумя способами:

  1. назвав её по имени со списком аргументов
  1. указав функцию в выражении

printf(“Half of%d is %d”, x, half_of(x))

В языке допускается использование рекурсивных функций, т.е. описание функций вызывающих самих себя. Для обращения к подобным функциям используются два способа:

  1. имя_функции(a1, a2, …, an) т.е. указывается имя функции, а в () перечисляются её фактические параметры.
  2. (*указатель_ на_функцию) (a1, a2, …, an)

Указатель_ на_функцию это переменная, содержащая адрес функции. Адрес функции в переменную может быть присвоен с помощью конструкции:

указатель_ на_функцию=имя_функции

При вызове функции значение её параметров передаются следующим способом. В начале для каждого формального параметра как бы заводится одноименная ему локальная переменная. Затем в локальную переменную засылается значение соответствующих фактических параметров, а затем выполняются операторы, описанные в функции. Этот способ передачи называется способом передачи по значению. В соответствии с этим следует помнить, что если любой формальный параметр должен возвращать результат выполнения функции, то соответствующий ему фактический параметр должен быть указателем, а не обычной переменной.

 

Пример: функция, которая меняет значение двух заданных переменных целого типа a и b.

void swap(a,b)

int *a, *b;

{

int z;

z=*a;

*a=*b;

*b=z;

}

Если в программе потребуется поменять значениями x и y, то обращаться к функции надо следующим образом swap(&x, &y) и результат возвратиться в основную программу.

 

Классы переменных

 

Все переменные а программах языка С подразделяются на глобальные и локальные. Глобальные переменные определяются на том же уровне, что и функции. Т.е. их описание не содержится внутри описания других функций. Если программа состоит из нескольких файлов, то глобальная переменная определяется в одном из них, а в остальных файлах должна использоваться конструкция

extern <имя><имя переменной>

Переменные, описанные внутри функций, называют локальными. Локальные переменные действуют только внутри блока, в котором описаны. Все локальные переменные существуют только во время выполнения блока, где они описаны. Поэтому при повторном входе в блок эти переменные создаются заново, а при выходе как бы перестают существовать. К локальным переменным относят формальные параметры процедур. Локальные переменные делятся на:

· автоматические,

· регистровые,

· статические.

 

Локальные переменные, определяемые обычным образом являются автоматическими. Они являются временными. Автоматические переменные имеют приоритет перед глобальными переменными, т.е. если Х-глобальная и х-локалная переменные определены в некотором блоке, то внутри этого блока х-будет использоваться как локальная переменная.

 

Переменные называются регистровыми если описаны в блоке так:

registers int<список переменных>

они также временные, но для хранения их значений компилятор пытается отвести внутренние регистры. Использование регистров позволяет значительно ускорить доступ к значению переменных т.к. эти значения будут размещаться в регистрах, а не в ячейках памяти. Однако т.к. число регистров не велико и обычно ограничивается 10-20 в зависимости от типа ЭВМ. Т.о. число регистровых переменных может быть небольшим. Взять адрес у регистровых переменных нельзя.

 

Статические переменные определяются следующим образом:

static<тип><список переменных>

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

 

Описание внешних объектов

 

Программа на языке С может состоять и одного или нескольких файлов. Каждый из указанных файлов может транслироваться и отлаживаться не зависимо от других. Затем программа собирается в единое целое с помощью редактора внешних связей(компановщик). Объекты, которые определены в одном из файлов, но используются и в других должны быть определены в других как внешние. Для этого используется ключевое слово extern, которое должно стоять перед описанием имени внешнего объекта по отношению к заданному файлу.

extern int g1, g2;

extern double funct() – это определение внешней функции

т.е. функция возвращает значение из другого файла, причем этот файл будет присоединен к программе на стадии ее компоновки. Можно использовать внешние массивы. Для одномерного внешнего массива в конструкции extern их размер можно опускать.

 




Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 325; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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