我遇到了指针和数组的问题。
在delphi中,如果我想要一个具有多种类型但具有相同数据的二维数组(它会指向相同的内存),我会使用绝对:
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]
访问数据,但我无法弄清楚如何为二维数组做到这一点。
任何提示?
修改
正如伊戈尔塞沃指出的那样,工会为此付出了奇妙的努力。
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
这正是我所寻找的!
答案 0 :(得分:3)
C中的二维数组实际上是具有不同索引的一维数组。您可以使用函数从矩阵索引中确定数组中的索引。例如,您可以使用index=i*n+j
来查找索引。
您也可以尝试使用union。
答案 1 :(得分:1)
你有C / C ++中的数组数组:
quint16 BiUnsigned[100][10];
// ...
qint16 **BiSigned = static_cast<qint16**>(BiUnsigned);