КАТЕГОРИИ: Архитектура-(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. Каждый аргумент может быть любым выражением на языке С: константой, переменной, арифметическим или логическим выражением или даже вызовом другой функции.
Вызов функции можно осуществить двумя способами:
printf(“Half of%d is %d”, x, half_of(x)) В языке допускается использование рекурсивных функций, т.е. описание функций вызывающих самих себя. Для обращения к подобным функциям используются два способа:
Указатель_ на_функцию это переменная, содержащая адрес функции. Адрес функции в переменную может быть присвоен с помощью конструкции: указатель_ на_функцию=имя_функции При вызове функции значение её параметров передаются следующим способом. В начале для каждого формального параметра как бы заводится одноименная ему локальная переменная. Затем в локальную переменную засылается значение соответствующих фактических параметров, а затем выполняются операторы, описанные в функции. Этот способ передачи называется способом передачи по значению. В соответствии с этим следует помнить, что если любой формальный параметр должен возвращать результат выполнения функции, то соответствующий ему фактический параметр должен быть указателем, а не обычной переменной.
Пример: функция, которая меняет значение двух заданных переменных целого типа 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; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |