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

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Sun Oct 15 11:41:48 2017 +0000
Revision:
0:bb939e0bc6e2
Child:
1:bbb9f0c3e523
1

Who changed what in which revision?

UserRevisionLine numberNew 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 }