いろいろなテクニック.Nucleo と DISCO-F746 用.

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Wed Apr 10 06:32:33 2019 +0000
Revision:
1:bbb9f0c3e523
Parent:
0:bb939e0bc6e2
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:bb939e0bc6e2 1 // 関数ポインタの使用例
MikamiUitOpen 0:bb939e0bc6e2 2 #include <cmath>
MikamiUitOpen 0:bb939e0bc6e2 3
MikamiUitOpen 0:bb939e0bc6e2 4 void (*fp1)(int);
MikamiUitOpen 0:bb939e0bc6e2 5 void (*fp2)(int&);
MikamiUitOpen 0:bb939e0bc6e2 6
MikamiUitOpen 0:bb939e0bc6e2 7 // typedef を使って一種の型名として扱う例
MikamiUitOpen 0:bb939e0bc6e2 8 typedef float (*FP3)(float);
MikamiUitOpen 0:bb939e0bc6e2 9 FP3 fp3Sin = sinf;
MikamiUitOpen 0:bb939e0bc6e2 10 FP3 fp3Cos = cosf;
MikamiUitOpen 0:bb939e0bc6e2 11
MikamiUitOpen 0:bb939e0bc6e2 12 void printA(int x) { printf("printA: x = %d\r\n", x); }
MikamiUitOpen 0:bb939e0bc6e2 13 void printB(int x) { printf("printB: x = %d\r\n", 2*x); }
MikamiUitOpen 0:bb939e0bc6e2 14
MikamiUitOpen 0:bb939e0bc6e2 15 void getA(int& a) { a = 2; }
MikamiUitOpen 0:bb939e0bc6e2 16 void getB(int& a) { a = 5; }
MikamiUitOpen 0:bb939e0bc6e2 17
MikamiUitOpen 0:bb939e0bc6e2 18 // 関数ポインタの配列
MikamiUitOpen 0:bb939e0bc6e2 19 void (*fp4[])(int) = { printA, printB };
MikamiUitOpen 0:bb939e0bc6e2 20 // 関数ポインタの配列(typedef を使う場合)
MikamiUitOpen 0:bb939e0bc6e2 21 typedef void (*FP5)(int);
MikamiUitOpen 0:bb939e0bc6e2 22 FP5 myFp[] = { printA, printB };
MikamiUitOpen 0:bb939e0bc6e2 23
MikamiUitOpen 0:bb939e0bc6e2 24 void SwPointer(int k)
MikamiUitOpen 0:bb939e0bc6e2 25 {
MikamiUitOpen 1:bbb9f0c3e523 26 printf("\r\nk = %d\r\n", k);
MikamiUitOpen 0:bb939e0bc6e2 27
MikamiUitOpen 0:bb939e0bc6e2 28 if (k==0) fp1 = printA;
MikamiUitOpen 0:bb939e0bc6e2 29 else fp1 = printB;
MikamiUitOpen 0:bb939e0bc6e2 30 fp1(100);
MikamiUitOpen 0:bb939e0bc6e2 31
MikamiUitOpen 0:bb939e0bc6e2 32 if (k==0) fp2 = getA;
MikamiUitOpen 0:bb939e0bc6e2 33 else fp2 = getB;
MikamiUitOpen 0:bb939e0bc6e2 34 int x;
MikamiUitOpen 0:bb939e0bc6e2 35 fp2(x);
MikamiUitOpen 0:bb939e0bc6e2 36 printf("nx = %d\r\n", x);
MikamiUitOpen 0:bb939e0bc6e2 37
MikamiUitOpen 0:bb939e0bc6e2 38 fp4[k](100);
MikamiUitOpen 0:bb939e0bc6e2 39 myFp[k](10);
MikamiUitOpen 0:bb939e0bc6e2 40 }
MikamiUitOpen 0:bb939e0bc6e2 41
MikamiUitOpen 0:bb939e0bc6e2 42 void MyFunctionPointer()
MikamiUitOpen 0:bb939e0bc6e2 43 {
MikamiUitOpen 0:bb939e0bc6e2 44 SwPointer(0);
MikamiUitOpen 0:bb939e0bc6e2 45 SwPointer(1);
MikamiUitOpen 0:bb939e0bc6e2 46
MikamiUitOpen 0:bb939e0bc6e2 47 printf("\r\n");
MikamiUitOpen 0:bb939e0bc6e2 48 printf("sin: %f\r\n", fp3Sin(3.1415926536f/3.0f));
MikamiUitOpen 0:bb939e0bc6e2 49 printf("cos: %f\r\n", fp3Cos(3.1415926536f/3.0f));
MikamiUitOpen 0:bb939e0bc6e2 50 }