いろいろなテクニック.Nucleo と DISCO-F746 用.
Dependencies: Array_Matrix mbed
StructCopy.hpp@0:bb939e0bc6e2, 2017-10-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Oct 15 11:41:48 2017 +0000
- Revision:
- 0:bb939e0bc6e2
- Child:
- 1:bbb9f0c3e523
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:bb939e0bc6e2 | 1 | // 同じ構造で異なる構造体のコピー |
MikamiUitOpen | 0:bb939e0bc6e2 | 2 | |
MikamiUitOpen | 0:bb939e0bc6e2 | 3 | void StructureCopy() |
MikamiUitOpen | 0:bb939e0bc6e2 | 4 | { |
MikamiUitOpen | 0:bb939e0bc6e2 | 5 | struct myStructA{ int a1; int a2; }; |
MikamiUitOpen | 0:bb939e0bc6e2 | 6 | struct myStructB{ int a1; int a2; }; |
MikamiUitOpen | 0:bb939e0bc6e2 | 7 | |
MikamiUitOpen | 0:bb939e0bc6e2 | 8 | myStructA x1 = { -1, 17 }; |
MikamiUitOpen | 0:bb939e0bc6e2 | 9 | myStructB y1; |
MikamiUitOpen | 0:bb939e0bc6e2 | 10 | //------------------------------------------------ |
MikamiUitOpen | 0:bb939e0bc6e2 | 11 | y1 = *(myStructB *)&x1; // ディープ・コピー |
MikamiUitOpen | 0:bb939e0bc6e2 | 12 | //------------------------------------------------ |
MikamiUitOpen | 0:bb939e0bc6e2 | 13 | printf("\r\ny1: %2d, %d\r\n", y1.a1, y1.a2); |
MikamiUitOpen | 0:bb939e0bc6e2 | 14 | y1.a1 = 2; |
MikamiUitOpen | 0:bb939e0bc6e2 | 15 | printf("y1: %2d, %d\r\n", y1.a1, y1.a2); |
MikamiUitOpen | 0:bb939e0bc6e2 | 16 | printf("x1: %2d, %d\r\n", x1.a1, x1.a2); // x1.a1 は書き換わっていないので |
MikamiUitOpen | 0:bb939e0bc6e2 | 17 | // y1 への代入はシャロ―・コピーではなく |
MikamiUitOpen | 0:bb939e0bc6e2 | 18 | // ディープ・コピーであることが確認できる |
MikamiUitOpen | 0:bb939e0bc6e2 | 19 | printf("\r\n"); |
MikamiUitOpen | 0:bb939e0bc6e2 | 20 | |
MikamiUitOpen | 0:bb939e0bc6e2 | 21 | myStructA u1[] = { {3, 6}, {7, 2}, {6, 1}}; |
MikamiUitOpen | 0:bb939e0bc6e2 | 22 | myStructB *u2; |
MikamiUitOpen | 0:bb939e0bc6e2 | 23 | u2 = (myStructB *)(&u1); |
MikamiUitOpen | 0:bb939e0bc6e2 | 24 | |
MikamiUitOpen | 0:bb939e0bc6e2 | 25 | //// myStructB u2[3]; |
MikamiUitOpen | 0:bb939e0bc6e2 | 26 | //// u2 = (myStructB[])((myStructB *)(&u1)); |
MikamiUitOpen | 0:bb939e0bc6e2 | 27 | for (int n=0; n<3; n++) |
MikamiUitOpen | 0:bb939e0bc6e2 | 28 | printf("%d: %d, %d\r\n", n, u2[n].a1, u2[n].a2); |
MikamiUitOpen | 0:bb939e0bc6e2 | 29 | } |