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

Лекция 06

.pdf
Скачиваний:
12
Добавлен:
19.05.2015
Размер:
262.62 Кб
Скачать

public:

int z;

};

void main ()

{

A s , *point; // создаем объект s типа A

point = &s; // инициализируем указатель адресом объекта s; point ->z = 100; // записываем в z число 100

}

Часто требуется выделять память для создания объектов классов динамически. И в этом случае требуется использовать указатель.

/* программа # 1.12 */

class A

{

public:

int z;

};

void main ()

{

A * point = new A; // создаем объект типа A и инициализируем указатель адресом это объекта.

point ->z = 100; // записываем в z число 100

…………………… // Другие операторы

…………………….

delete point; // незабываем возвращать память ОС

}

Каждому оператору new должен соответствовать свой оператор delete.

6.5. Указатели на функции

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

/* программа # 1.13 */

# include < stdio.h> void bell(void); void main()

{

void (*f)( void );

f = bell; f();

(*f)(); // можно и так

}

/* эта функция издает гудок */

void bell (void)

{

putchar(7);

}

Объявление void (*f)( void );означает, что f является указателем на функцию, возвращающую тип void c пустым списком формальных параметров. К примеру объявление int (*func)( int, float );означает что func ecть указатель на функцию возвращающую тип int c двумя формальными параметрами типа int и float. В объявлении указателя на функцию очень важным является синтаксис. Обратите на это внимание.

Если в программе объявлен указатель, то он должен быть инициализирован. Это сделано в операторе f = bell. В данном случае указателю f присвоен адрес функции bell. Идентификатор bell - есть символический адрес памяти, с которого будет выполняться функция. Далее в программе последовательно дважды выполняется обращение к функции bell через указатель. При этом компьютер дважды издаст звуковой сигнал.

В программах указатели на функции, в основном, используются

для сохранения адресов программ обработчиков прерываний;

для передачи функций в качестве формальных параметров другим функциям.

float (*f)(float ) - указатель на интегрируемую функцию, возвращающую тип float и с одним формальным параметром типа float; float l_limit - нижний предел интегрирования ;
float u_limit - верхний предел интегрирования ; float delta_x - шаг по оси x;
float x, summa =0.0; x=l_limit + delta_x / 2.0;
while ( x <= u_limit)
{
summa += delta_x * f( x); x = x + delta_x;

Следующая программа # 1.14 демонстрирует такую возможность при вычислении интеграла методом площадей.

/* программа # 1.14 */

/* прототипы функций */ float integral (float (*)(float ),float ,float ,float ); float func ( float );

# include < stdio.h> void main ( void )

{

float integ; /*

- нижний предел интегрирования = 0.0;

-верхний предел интегрирования = 12.0;

-шаг по оси x = 0.2;

*/

integ = integral (func, (float)0.0,(float )12.0,(float) 0.02); printf ("Интеграл = %f\n",integ);

}

/* вычисление интеграла методом площадей */

float integral (float (*f)(float ),float l_limit, float u_limit, float delta_x)

{

/*

*/

}

return summa;

}

/* интегрирумая функция у = х */ float func ( float x )

{

return x;

}

При выполнении этой программы был получен такой результат: Интеграл = 72.000137,в то время как точное значение равно 72.0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]