Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
11.05.2015
Размер:
2.03 Mб
Скачать

2.5.5.Использование указателя на функцию при вызове функции.

Описание переменной указателя на функцию:

тuп * ( имя ) ( );

Пример:

float (* f1) ( );

f1 является указателем на функцию возвращающую значение с плавающей точкой.

Если функция fun c имеет определение

float fun c ( )

{ }

то fun c можно рассматривать, как указатель константы представляющий стартовый адрес этой функции, то справедлив следующий оператор присваивания

f1 = fun c;

Далее вместо указания имени функции fun c посредством указателя переменной f1 надо записать (* f1) ();

Ecли функция f2, например, имеет определение

char a;

int b;

float f2 ( a,b )

{ }

то обратиться к этой функциис помощью указателя-переменной f1 можно так:

1) Присвоить указателю имя функции f2

Например:f1 = f2

2) Обратиться через указатель переменной, записав в скобках список аргументов.

Например: (* f1) (g, f);

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

( * указатель на функцию) (список аргументов)

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

2.5.6.Главная функция, передача аргументов главной функции.

Главная функция – это функция, которая имеет имя main. Главная функция обязательно в любом комплексе функции. Она получает управление от операционной системы (ОС). После окончания работы главной функции управление передается обратно в операционную систему.

Главная функция должна быть только одна в выполняемом комплексе функций. Программа может состоять из одной главной функции. Главная функция может содержать обращение к вызываемым функциям, если это целесообразно, тогда программа – это комплекс функций, если при выполнении вызываемых функций становится невозможным нормальное продолжение работы программы, управление передается операционной системе до возврата в главную функцию и ее окончания. В программу на "С" можно передавать некоторые аргументы и параметры из командной строки операционной системы. Когда в начале вычислений производится обращение к функции main, ей передается два параметра: первый из них имеет имя ardc и определяет число командных аргументов при обращении к программе, второй имеет имя argv и представляет собой указатель на массив символьных строк, содержащих эти аргументы. (В одной строке один аргумент.)

Пусть на диске А есть программа

PRIM 1. EXE

Обратимся к ней следующим образом

А: > PRIM 1 ЛЕТО ОСЕНЬ ЗИМА < ВВОД >

тогда argv [0] argv [1] (это указатель (это указатель на PRIM 1) на лето)

Смотри рисунок «структура массивов. Указатели argv»

Argv––––>

argv[0]

––––>

PRIM

arg=4

argv[1]

––––>

ЛЕТО

argv[2]

––––>

ОСЕНЬ

argv[5]

––––>

ЗИМА

На первый фактический аргумент указывает argv [1], а на последний argv[3]. Если argc=1, то после имени программы в командной строке параметров нет.

Пример использования внешних аргументов

# include < stdio.h >

main ( argc, argv ) / * вывод на экран символьных строк, являются аргументами команды * /

int argc; / * argv - это число командных аргументов * /

char * argv []; / * argv - это указатель на массив указателей, последний адресует командные аргументы * /

{ while ( - - argc > 0 )

printf ( (argc > 1)? " % S " : " % S\n", * * ++ argv );

/ * Если argc равен 1, то цикл whileне выполняется, т.к. argv[0] - ссылка на саму команду, если ardс больше 1, то последовательно печатается каждая символьная строка командный аргумент * /

}

Функция printf - форматный аргумент, может быть выражением.