![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование указателей для работы с функциямиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
(2 часа) Цель работы: выработать практические навыки в написании программ с функциями и в использование указателей для работы с функциями.
Теоретические сведения С позволяет использовать указатели на базовые типы, на массивы и структуры как параметры передаваемые в функцию и возвращаемые из функции, а также указатели на функции. Общий синтаксис для объявления указателя на структуру как параметры функции: [const ]<тип>*<имя указателя> При объявлении функции имя указателя как формального параметра может не указываться аналогично другим видам формальных параметров. Ключевое слово const предохраняет данные от изменения данных в структуре функции, тогда как отсутствие ключевого слова const позволяет функции изменять значения данных, т.к. при использовании указателей в теле функции известны физические адреса переменных. Пример использования указателей на различные типы данных как параметры функции. int funct (float*, int*); // передача указателей на тип float и на тип int Struct Мyst { //члены; }; void loadMy(Myst*pmy); // передача указателя рmу натип структур типа Муst. В примере объявлена структура типа Myst и объявлена функция loadMy(). Функция имеет формальный параметр-указатель pmy на тип Мyst. Вызов функции funct() и fn(): Float*pf; int*pl; Int a = funct(pf, pl); fn(pf); Объявление указателя на функцию аналогично объявлению функций, с которыми он будет использоваться. Например void (* pfunc) (int, int); Объявлен указатель pfunc на функцию, которая требует два параметра типа int и не возвращает значения (void). Типы и количество параметров, а также тип возвращаемого значения должны создать. Для использования указателя объявим функцию void f1 (int, int); Присвоим указателю адрес функции pfunc= f1; и осуществим её вызов (*pfunc)(2,4);
Указатели как параметры функции Указатели широко используются при передаче аргументов в функцию и из функции, создавая двухсторонний поток данных между вызываемой и вызывающей функциями. Для передачи аргументов в функцию используют: 1 Указатели на простые типы данных, как параметры функции. 2 Указатели на массивы (передавать по значению нельзя). 3 Указатели на перечислимые типы как параметры функции. 4 Указатели на структуры и объединения как параметры функции. 5 Указатели на функции (передавать по значению нельзя).
С позволяет объявлять и использовать указатели на функции. В таком указателе хранится адрес функции, т.е. адрес первого выполнимого оператора. Указатель на функцию можно использовать для её вызова. Общий синтаксис для объявления указателя на функцию: <тип_возвращаемого_значения> (*<имя_указателя_на_функцию>) (<объявления_типов_параметров>); При инициализации указателя на функцию нужно использовать имя функции, у которой тип возвращаемого значения и список типов параметров соответствуют объявлению указателя. Имя функции имеет тип указателя на функцию с заданными для неё в объявлении типами параметров и возвращаемого значения. Инициализация указателя на функцию: <имя_указателя> = <имя_функции>; Общий синтаксис для вызова функции с использованием указателя: (*<имя_указателя>)(<список_фактических_параметров>); Пример int linescarch (int)*pstring //объявление функции linesearch (int*) Voild main() {int a; * pstr = “Hello World!”; // объявление переменной и указателя pstr на тип int int (*search)(int*); // объявление указателя на функцию search= linesearch; //присваиваем адрес функции linesearch() указателю search //другие операторы a = (* search)(pstr); // вызов функции linesearch () с помощью указателя. } Пример /* ЗАНЯТИЕ N 16 Разработал Петров Ю.В. Объявить заданные функции и указатель на функцию этого типа, выполнить определение функций. Объявить массивы и указатели на них, выполнить инициализацию в соответствии с заданными зависимостями и использованием указателей. Для одного из массивов выделить память в куче. Вывести значения элементов массивов на экран. Осуществить вызов функций с применением указателя. Вывести результаты работы функций на экран. */ #include <stdio.h> #include <math.h> #include <conio.h> #include <iostream.h> const int kx = 6, ky = 6, kw = 8, a1 = 3, a2 = 9, b1 = 6, b2 = 5, c1 = 6, c2 = 10;
//Вычисляет сумму отрицательных элементов массива float summa (int, float*); //Вычисляет произведение положительных элементов массива float prois (int, float*); float (*ps)(int, float*); //Объявление указателя на функцию
void main () { int i; float y[ky+2]; //+2 элемента массива для хранения // результатов работы функций float *px=new float [kx+2];//Выделение памяти для массива в "куче" float *xptr; clrscr(); printf("Массив x[]\n");
for (i=0; i<kx; i++) { *px = a1*i*i - a2*(5-i); //Инициализация динамического массива printf("x[%d] = %6.2f %p \n",i, *px, px); px++; } xptr = y; gotoxy(25,1); printf("Массив y[]\n"); for (i=0; i<ky; i++) { *xptr = b1*sin(2*i) + b2*exp(i-5); //Инициализация массива y[] gotoxy(30,i+2); printf("y[%d] = %6.2f\n",i,*xptr); xptr++; } px-=kx; //Установка указателя на нулевой элемент массива printf("Указатель на дин. массив содержит адрес рx = %p\n ", px); ps=summa; //Связывание указателя с функцией summa() printf("Указатель на функцию содержит адрес рs = %p\n ", ps); printf("Сумма: x[%d] = %6.2f ", kx, (*ps)(kx, px)); printf("Сумма: y[%d] = %6.2f\n ", ky, (*ps)(ky, y)); ps=prois; //Связывание указателя с функцией prois() printf("Указатель на функцию содержит адрес рs = %p\n ", ps); printf("Произведение: x[%d] = %8.2f ", kx+1, (*ps)(kx, px)); printf("Произведение: y[%d] = %8.2f\n ", ky+1, (*ps)(ky, y)); delete [] px; //Освобождение памяти, выделенной в "куче"для массива getch(); }
float summa (int kol, float* Arr) //Определение функции { float s=0; for (int i=0; i<kol; i++) if (Arr[i]<0) s+=Arr[i]; return s; }
float prois (int kol, float* Arr) //Определение функции { float s=1; for (int i=0; i<kol; i++) if (Arr[i]>0) s*=Arr[i]; return s; } /* Массив x[] Массив y[] x[0] = -45.00 0AD0 y[0] = 0.03 x[1] = -33.00 0AD4 y[1] = 5.55 x[2] = -15.00 0AD8 y[2] = -4.29 x[3] = 9.00 0ADC y[3] = -1.00 x[4] = 39.00 0AE0 y[4] = 7.78 x[5] = 75.00 0AE4 y[5] = 1.74 Указатель на дин. массив содержит адрес рx = 0AD0 Указатель на функцию содержит адрес рs = 049C Сумма: x[6] = -93.00 Сумма: y[6] = -5.29 Указатель на функцию содержит адрес рs = 04F3 Произведение: x[7] = 26325.00 Произведение: y[7] = 2.52 */ Ход работы 1 Изучить теоретические сведения. 2 В соответствии с индивидуальным заданием по лабораторной работе №7. разработать алгоритм. 3 Объявить указатели на функции. Использовать указатели для вызова соответствующих функций. Использовать оператор switch для выбора варианта функций. 4 Разработать и набрать программу на компьютере, устранить ошибки. 5 Получить результат. 6 Оформить отчет. 7 Подготовиться к защите лабораторной работы, изучив контрольные вопросы.
Индивидуальное задание к лабораторной работе №16 Составить программу использующую вызовы функций с помощью указателей. Индивидуальные задания приведены в таблице 16.1. Таблица 16.1 - индивидуальные задания
Требования к содержанию отчёта приведены в лабораторной работе №1.
Контрольные вопросы для подготовки и самостоятельной работы
1 Можно ли использовать указатели для передачи данных в функции? 2 Какие типы данных можно передать в функцию с использованием указателей? 3 Можно ли менять значения данных в функции при использовании указателей при наличии модификатора const. 4 Можно ли возвращать указатели из функций? 5 Как объявить указатель на функцию? 6 Можно ли использовать указатели для работы с функциями различного типа? 7 Какой тип имеет имя функции? 8 Как связать указатель с конкретной функцией? 9 Как использовать указатели для вызова функции? 10 Как ограничивается доступ к членам класса? 11 Как связать и использовать указатель на функцию? 12 Как вызвать функцию с использованием указателя? Лабораторная работа №17 Использование функций высокого и низкого уровня для работы с (2 часа) Цель работы: научиться использовать функции высокого и низкого уровня при работе с файлами.
Теоретические сведения
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 561; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.60.154 (0.008 с.) |