Есть два варианта передачи аргументов в функцию: путем копирования параметров вызова в аргументы функции и путем передачи в функцию адресов параметров. Если уж быть честным, то в аргументы функции копируются те параметры, которые были подставлены в точке вызова. Просто если скопировать адрес какой-либо переменной, то по нему можно получить доступ к этой переменной, и это позволяет изменить значение переменной изнутри функции. Таким образом, используя в качестве аргументов адреса переменных можно получить от функции более одного результирующего значения.
Расмотренные ранее понятия определять и описывать имеют важное значение для функций. В С существует понятие прототипа функции: это описание функции, которое объясняет, каким образом к функции надо обращаться, какие аргументы и какого типа следует ей передвать и какого типа возвражаемое значение от нее можно получить. По сути, это информация компилятору, что можно компилировать программу с где-то определенной функций – достаточно проверить лишь правильность ее вызова.
При определении функции мы объявляем ее имя, список и типы аргументов, тип возвращаемого значения и тело функции. Аналогично переменным, функции должна быть определена лишь однажды, а описание ее может присутствовать в каждом модуле, где мы хотим воспользоваться этой функцией.
Для включения прототипов функций в языке С широко используются заголовочные файлы .h (headers). Большинство стандартных заголовочных файлов языка С не содержит ничего, кроме прототипов функций, описаний типов и констант, необходимых для этих функций.
Практический совет: при написании каждой новой функции тутже скопируйте ее заголовок и перенесите либо в соответствующий заголовочный файл либо просто в начало файла, в котором вы работаете (не забудьте поставить точку с запятой в конце прототипа). Это облегчит работу не только компилятору, но и вам.
Функция main().
Как мы уже не раз говорили, каждая программа должна иметь функцию main(). Исполняющая среда операционной системы при запуске приложения посылает функции main() три параметра:
int main (int argc, char *argv[], char *env[])
int argc – целое, счетчик, это число аргументов командной строки, посылаемое функции main;
char *argv[] – это массив указателей на строки.
argv[0] – это полное имя запускаемой программы. (Для различных ОС и интерфейсов это имя может варьироваться см. Философия программирования для Windows NT).
argv[1] – указывает на первое после имени программы слово
argv[2] – указывает на второе после имени программы слово
…
argv[argc - 1] – указывает на последнее слово в списке аргументов вызова программы
argv[argc] – содержит NULL.
char *env[] – также массив указателей на строки. Каждый элемент содержит строку типа
ENVVAR = value, где
ENVVAR – это имя переменной среды, типа PATH
value – это значение данной переменной окружения.
Например, PATH = C:\;C:\DOS;
При определении функции main можно опускать аргументы (все или с конца). Функция main не требует описания, так как в явном виде вы ее не вызываете.
Агрументы командной строки могут содержять символы маскирования (если это поддерживается используемым компилятором). При этом они могут расширяться для всех имен файлов, которые совпадают с аргументом (подобно, например, DOSовской команде copy). При этом имена всех файлов, подходящих к указанной маске, заносятся в массив argv. Максимальный размер массива строк argv ограничивается только размером памяти в куче.
1.6. Конструкторы составных данных (массивов, структур и т.п.)
Многие языки позволяют создавать типы данных более сложные чем базисные. Для этого предусмотрены стандартные конструкторы типов данных – массивы и структуры.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.