Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Тело функции





тип *имя_указателя;

¼;

return имя_указателя;

}

Рассмотрим пример сложения двух одномерных массивов и результата возвращения через указатель.


 

Программный код решения примера

#include <stdio.h> #include <conio.h> #include <stdlib.h> int *out2(int A[], int B[], int); int main (void) { int i, n; int A[] = {1,2,3,4,5}; int B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); puts("\n The initial arrays: "); for (i = 0; i < n; i++) printf(" %d", A[i]); puts(""); for (i = 0; i < n; i++) printf(" %d", B[i]); ptrAB = out2(A, B, n); puts("\n\n Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); puts("\n\n Control of the arrays: "); for (i = 0; i < n; i++) printf(" %d", A[i]); puts(""); for (i = 0; i < n; i++) printf(" %d", B[i]); free(ptrAB); // освобождение выделенной памяти printf("\n\n... Press any key: "); getch(); return 0; } int *out2(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); //выделение памяти for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; }

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

Указатели возвращаются подобно значениям любых других типов данных. Чтобы вернуть указатель, функция должна объявить его тип в качестве типа возвращаемого значения. Таким образом, если функция возвращает указатель, то значение, используемое в ее инструкции return, также должно быть указателем. В частности, многие библиотечные функции, предназначенные для обработки строк, возвращают указатели на символы.

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

Указатель на функцию – это переменная, содержащая в памяти адрес, по которому расположена функция [2]. Имя функции – это адрес начала ее программного кода. Указатели на функции могут передаваться функциям в качестве аргументов, возвращаться функциями, сохраняться в массивах и присваиваться другим указателям на функции [2].

Типичное определение указателя на функцию следующее:

тип_возвращаемый_функцией(*имя_указателя_на_функцию)(аргументы);

В круглых скобках определяется указатель на функцию, которая возвращает тот или иной тип – тип_возвращаемый_функцией. Хотя знак * обозначает префиксную операцию, он имеет более низкий приоритет, чем функциональные круглые функции, поэтому для правильного комбинирования частей объявления необходимы дополнительные скобки [1]. При этом аргументы – это аргументы той или иной функции с заданным типом возвращаемого значения, для которой определяется указатель *имя_указателя-_на_функцию. Очевидно, что возможны сложные объявления функций.

Указатели на функции часто используются в системах, управляемых меню [2]. Пользователь выбирает команду меню (одну из нескольких), обслуживающую своей функцией. Указатели на каждую функцию находятся в массиве указателей. Выбор пользователя служит индексом, по которому из массива выбирается указатель на нужную функцию.

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


 







Дата добавления: 2015-09-06; просмотров: 404. Нарушение авторских прав; Мы поможем в написании вашей работы!




Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

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

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

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Studopedia.info - Студопедия - 2014-2026 год . (0.009 сек.) русская версия | украинская версия