我又被指標原理搞糊涂了。
我有以下兩個陣列 a 和 b:
int16_t a[3][2] = {
{30, 40},
{31, 41},
{32, 42}
};
int16_t b[3][2] = {
{50, 40},
{51, 41},
{52, 42}
};
b 的第二列應始終等同于 a 的第二列。因此,每當第二列上的 a 發生變化(例如 40 變為 60)時,這也應該用 b 表示。
所以我正在使用指標尋找類似的東西,但無法使其作業:
int16_t a[3][2] = {
{30, 40},
{31, 41},
{32, 42}
};
int16_t b[3][2] = {
{50, (*a[0][1])},
{51, (*a[1][1])},
{52, (*a[2][1])}
};
我對指標原理不太熟悉。有什么建議?
uj5u.com熱心網友回復:
如果你想實作這一點,b 的元素應該是指標。在這種情況下,您可以將第二列的元素設定b為指向它們在 array 中的對應元素a。
所以你的代碼可以這樣寫:
int *b[3][2] = {
{new int(50), (&a[0][1])},
{new int(51), (&a[1][1])},
{new int(52), (&a[2][1])}
};
請注意,如果您不記得delete使用new. 這可以通過使用另一個陣列來初始化 的第一列來避免b。
使用此解決方案,您必須使用*運算子查看 的元素值b。例如:
std::cout << *b[0][0] << std::endl;
一個相當簡單的解決方案是實作一個函式來一起更新兩個陣列。這可以簡化處理和使用 元素的程序b,但它的性能有點差,因為更新程序可能需要兩倍于第一個解決方案的時間。
uj5u.com熱心網友回復:
您立即間接通過指標,并將指向的整數的副本存盤在陣列中。對原件的更改對副本沒有影響。由于b陣列是一個(陣列的)整數陣列,它的元素不能指向或參考任何東西;它們既不是指標也不是參考。
如果您希望一個值反映另一個值,則需要間接。在這種情況下,指標將是選擇,因為參考不能是陣列元素。這是一個示例,其中b是指向整數的(陣列)指標陣列
std::int16_t b0[] = {
50,
51,
52,
};
std::int16_t* b[][2] = {
{b0 0, a[0] 1},
{b0 1, a[1] 1},
{b0 2, a[2] 1},
};
您也可以定義一個特殊的類似“變體”的類,該類或者存盤整數,或者透明地參考整數。但這將是很多樣板檔案,我不相信這值得付出努力。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366856.html
