
- •Додатковий матеріал до лекцій із дисципліни "Програмування"
- •1 Структури та об’єднання
- •1.1 Структури
- •1.2 Об’єднання та бітові поля
- •2 Функції
- •2.1 Передача параметрів за значенням
- •2.2 Передача параметрів за покажчиком
- •2.3 Функції та масиви
- •2.4 Функції з параметрами за замовченням
- •2.5 Функції з змінним числом параметрів
- •2.6 Передача параметрів в функцію main()
- •2.7 Рекурсивні та інлайн-функції
- •2.8 Функції, що повертають покажчик
- •2.9 Функції та структури
- •2.10 Перевантаження функцій та шаблони функцій
- •2.11 Покажчик на функцію
- •3 Робота з файлами
- •3.1 Відкриття та закриття файлів
- •3.2 Введення даних в файл та виведення даних з файлу
- •3.3 Керування файлами та каталогами
- •4 Багатофайлова компіляція
- •Література
2.11 Покажчик на функцію
Приклад 2.33
float mul(float x,float y) {return x*y;} |
float sum(float x,float y) {return x+y;} |
int main() |
{float (*ptrmul)(float,float); |
float (*ptrsum}(float,float); |
ptrmul=mul; |
ptrsum=sum; |
float f1=3.0,f2=9.0,f3; |
f3=(*ptrmul)(f1,f2)+(*ptrsum)(f1,f2); |
printf("f3l=%.1f", f3); |
float(*ptr)(float,float); |
ptr=sum; |
printf("sum=%.1f",(*ptr)(f1,f2)); |
ptr=mul; |
printf("mul=%.1f", (*ptr)(f1,f2)); |
return 0; } |
|
|
Приклад 2.34
#include <stdio.h> |
char *func(){char *s="abcdе"; return s;} |
int main() |
{char *str; |
char *(*prtfunc)(); |
prtfunc=func; |
str=(*prtfunc)(); |
puts(str); |
return 0;} |
|
|
Приклад 2.35
#include <stdio.h> |
int f1(int x){return x+x;}; |
int f2(int x){return x*x;}; |
int f3(int x){return ~x;}; |
int main() |
{int(*p[3])(int); |
p[0]=f1; p[1]=f2; p[2]=f3; |
int a=(*p[0])(5); |
int b=(*p[1])(a); |
int c=(*p[2])(a); |
printf(“a=%d b=%d c=%u\n”,a,b,c); |
return 0;} |
|
Приклад 2.36
#include <stdio.h> |
void typ0(){printf("Привет,");} |
void typ1(){printf(" дорогой");} |
void typ2(){printf(" друг!");} |
typedef void (*TYPE)(); |
TYPE mpf[]={typ0,typ1,typ2}; |
//void (*mpf[])()={typ0,typ1,typ2}; |
int main() |
{for(int i=0;i<3;i++) |
mpf[i](); |
return 0;} |
|
Приклад 2.37
#include <stdio.h> |
float cube(float y) {return y*y*y;} |
float sqr(float e) {return e*e;} |
float num(float y) {return y;} |
typedef float (*PF)(float); |
float summa(PF f,float a[],int N) |
{float sum=0.0; |
for(int i=0;i<N;i++) |
sum+=(*f)(a[i]); |
return sum;} |
int main() |
{float res1, res2,A[3]={1.5,2.0,3.0}; |
res1=summa(cube,A,3); |
printf("res1=%.3f\n",res1); |
res2=summa(sqr,A,3); |
printf("res2=%.3f\n",res2); |
res3=summa(num,A,3); |
printf("res2=%.3f\n",res2); |
return 0;} |
|