いろいろなテクニック.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
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 1:bbb9f0c3e523 19
MikamiUitOpen 1:bbb9f0c3e523 20 // 同じ構造体へのコピー
MikamiUitOpen 1:bbb9f0c3e523 21 myStructB y2;
MikamiUitOpen 1:bbb9f0c3e523 22 y2 = y1;
MikamiUitOpen 1:bbb9f0c3e523 23 printf("\r\ny1: %2d, %d\r\n", y1.a1, y1.a2);
MikamiUitOpen 1:bbb9f0c3e523 24 y2.a1 = 9;
MikamiUitOpen 1:bbb9f0c3e523 25 printf("y1: %2d, %d\r\n", y1.a1, y1.a2);
MikamiUitOpen 1:bbb9f0c3e523 26 printf("y2: %2d, %d\r\n", y2.a1, y2.a2);
MikamiUitOpen 1:bbb9f0c3e523 27
MikamiUitOpen 0:bb939e0bc6e2 28 printf("\r\n");
MikamiUitOpen 0:bb939e0bc6e2 29 myStructA u1[] = { {3, 6}, {7, 2}, {6, 1}};
MikamiUitOpen 0:bb939e0bc6e2 30 myStructB *u2;
MikamiUitOpen 0:bb939e0bc6e2 31 u2 = (myStructB *)(&u1);
MikamiUitOpen 0:bb939e0bc6e2 32
MikamiUitOpen 0:bb939e0bc6e2 33 //// myStructB u2[3];
MikamiUitOpen 0:bb939e0bc6e2 34 //// u2 = (myStructB[])((myStructB *)(&u1));
MikamiUitOpen 0:bb939e0bc6e2 35 for (int n=0; n<3; n++)
MikamiUitOpen 0:bb939e0bc6e2 36 printf("%d: %d, %d\r\n", n, u2[n].a1, u2[n].a2);
MikamiUitOpen 0:bb939e0bc6e2 37 }