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

Dependencies:   Array_Matrix mbed

StructCopy.hpp

Committer:
MikamiUitOpen
Date:
2019-04-10
Revision:
1:bbb9f0c3e523
Parent:
0:bb939e0bc6e2

File content as of revision 1:bbb9f0c3e523:

// 同じ構造で異なる構造体のコピー

void StructureCopy()
{
    struct myStructA{ int a1; int a2; };
    struct myStructB{ int a1; int a2; };
    
    myStructA x1 = { -1, 17 };
    myStructB y1;
//------------------------------------------------
    y1 = *(myStructB *)&x1;     // ディープ・コピー
//------------------------------------------------
    printf("\r\ny1: %2d, %d\r\n", y1.a1, y1.a2);
    y1.a1 = 2;
    printf("y1: %2d, %d\r\n", y1.a1, y1.a2);
    printf("x1: %2d, %d\r\n", x1.a1, x1.a2);    // x1.a1 は書き換わっていないので
                                                // y1 への代入はシャロ―・コピーではなく
                                                // ディープ・コピーであることが確認できる
    
    // 同じ構造体へのコピー
    myStructB y2;
    y2 = y1;
    printf("\r\ny1: %2d, %d\r\n", y1.a1, y1.a2);
    y2.a1 = 9;
    printf("y1: %2d, %d\r\n", y1.a1, y1.a2);
    printf("y2: %2d, %d\r\n", y2.a1, y2.a2);

    printf("\r\n");
    myStructA u1[] = { {3, 6}, {7, 2}, {6, 1}};
    myStructB *u2;
    u2 = (myStructB *)(&u1);

////    myStructB u2[3];
////    u2 = (myStructB[])((myStructB *)(&u1));
    for (int n=0; n<3; n++)
        printf("%d: %d, %d\r\n", n, u2[n].a1, u2[n].a2);
}