Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

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

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

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

Пример:

float ( * f1 ) ( );

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

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

floatfunc( )

{ }

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

f1 =func;

Далее вместо указания имени функции 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, то цикл whail не выполняется, т.к. argv[0] - ссылка на саму команду, если ardс больше 1, то последовательно печатается каждая символьная строка командный аргумент * /

}

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