簡體   English   中英

兩個具有不同類型的二維數組指向相同的內存

[英]Two bidimensional array with different types pointing to the same memory

我有指針和數組的問題。

在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

這正是我想要的!

C中的二維數組實際上是具有不同索引的一維數組。 您可以使用函數從矩陣索引中確定數組中的索引。 例如,您可以使用index=i*n+j來查找索引。

您也可以嘗試使用聯合

你有C / C ++中的數組數組:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM