【问题标题】:Two bidimensional array with different types pointing to the same memory不同类型的二维数组指向同一个内存
【发布时间】:2013-11-29 12:38:21
【问题描述】:

我遇到了指针和数组的问题。

在 delphi 中,如果我想要一个具有多种类型但数据相同的二维数组(它将指向相同的内存),我会使用 absolute

arr_byte : array [1..2,1..80] of byte;
arr_word : array [1..2,1..40] of word absolute arr_byte;

所以我可以访问具有不同类型(字节、字、双字等)的相同数据。

现在我切换到 C++ 和 QT5,我不明白如何使它适用于二维数组。 对于我使用的普通数组

quint16 Tab_Unsigned[100];

qint16  *Tab_Signed[100];

*Tab_Signed= Tab_Unsigned;

然后我用

Tab_Unsigned[1]
(*Tab_Signed)[1]

访问数据,但我不知道如何为二维数组执行此操作。

有什么建议吗?

编辑:

正如 Igor Sevo 指出的那样,工会为此非常出色。

union Data
{
    qint16 q_int16[2][2];
    quint16 q_uint16[2][2];
    qint8 q_int8[2][4];
    quint8 q_int8[2][4];
};

union Data u_data;

u_data.q_int16[1][0] = -1;

qDebug() << u_data.q_uint16[1][0]; // prints  65535
qDebug() << u_data.q_int16[1][0];  // prints -1
qDebug() << u_data.q_int8[1][0];    // prints -1
qDebug() << u_data.q_int8[1][1];    // prints -1
qDebug() << u_data.q_uint8[1][0];   // prints 255
qDebug() << u_data.q_uint8[1][1];   // prints 255

这正是我想要的!

【问题讨论】:

    标签: c++ delphi qt5


    【解决方案1】:

    C 中的二维数组实际上是具有不同索引的一维数组。您可以使用函数从矩阵索引中确定数组中的索引。例如,您可以使用index=i*n+j 来查找索引。

    您也可以尝试使用union

    【讨论】:

      【解决方案2】:

      您在 C/C++ 中有数组数组:

      quint16 BiUnsigned[100][10];
      // ...
      qint16 **BiSigned = static_cast<qint16**>(BiUnsigned);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-10
        • 2020-04-20
        • 2023-04-06
        • 1970-01-01
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多