我在處理資料時遇到問題
我正在嘗試使用指標一次性將所有資料從一個結構傳遞到另一個結構
當我這樣做時:
#define ADDRESS_SPACE 8
struct dma_engine
{
int (*Address)[ADDRESS_SPACE] = {nullptr};
};
struct data_engine
{
int data[ADDRESS_SPACE] = {0x10,0x14,0x18,0x1B,0x20,0x24,0x28,0x2B};
};
int main(int argc, char* argv[])
{
dma_engine Dma_0;
data_engine Data_0;
Dma_0.Address = &Data_0.data;
for(int i = 0;i <ADDRESS_SPACE;i )
{
printf("*Dma_0.Address[%d] ---> 0x%x\n",i,*Dma_0.Address[i]);
}
printf("\n");
return 0;
}
我只收到 data[ADDRESS_SPACE] 陣列的第一個正確元素:
*Dma_0.Address[0] ---> 0x10
*Dma_0.Address[1] ---> 0x96408360
*Dma_0.Address[2] ---> 0x77a39b80
*Dma_0.Address[3] ---> 0xb6072bc0
*Dma_0.Address[4] ---> 0x0
*Dma_0.Address[5] ---> 0x0
*Dma_0.Address[6] ---> 0x96408368
*Dma_0.Address[7] ---> 0x0
有沒有辦法一次性傳遞所有正確的資料,而不是單獨處理陣列的每個元素?
非常感謝
uj5u.com熱心網友回復:
假設您確實需要一個強型別的指向陣列的指標作為您的Address成員,那么您擁有的代碼在列印回圈期間沒有正確取消參考目標陣列。具體來說,這個:
*Dma_0.Address[i]
該成員是指向 8-int 陣列的指標。該語法適用于 *同[i]一個運算式,也適用于同一個運算元,這不是您想要的。[]在此背景關系中應用時,其優先級高于C 中的優先級。*
因此,您可能認為該運算式的意思是:
- 取消參考指向陣列的指標,
*用于獲取基本陣列 - 應用于
[i]該陣列以獲取所需i的 'th 元素。
但實際上你要問的是:
- 找到
i從指定地址開始的第 'th array-of-8-int。 - 用于
*獲取該陣列的第一個元素
解決方案
假設您想保留所有現有的型別使用,解決方案是簡單地通過將其封裝在* 優先級高于[]. 運算式括號在語言中具有最高優先級,并將提供您想要的內容。
所以,
(*Dma_0.Address)[i]
*Dma_0.Address它說:在應用于結果之前進行評估[i]。程式中的這一更改會產生以下輸出*:
*Dma_0.Address[0] ---> 0x10
*Dma_0.Address[1] ---> 0x14
*Dma_0.Address[2] ---> 0x18
*Dma_0.Address[3] ---> 0x1b
*Dma_0.Address[4] ---> 0x20
*Dma_0.Address[5] ---> 0x24
*Dma_0.Address[6] ---> 0x28
*Dma_0.Address[7] ---> 0x2b
我懷疑這就是你真正想要的。
* 我沒有費心更改任何 printf 訊息,只選擇更改有問題的引數,當我測驗這個時,以防不明顯
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425203.html
上一篇:使用指標更新二叉樹
下一篇:重寫規則$tag的重定向問題
