我在 int 變數中有一個結構存盤的地址。我可以取消參考結構嗎?
說:int x = 3432234;// 結構的記憶體地址現在我想從中訪問一些結構。
我一直建議這些步驟。
- 將地址存盤在 int 變數中
- 將該 int 轉換為結構指標
- 然后取消參考它
但是不知道怎么申請。
uj5u.com熱心網友回復:
在金屬環境中以這種方式使用結構是很常見的,因為硬體暫存器通常是記憶體映射的。
typedef struct
{
volatile uint32_t reg1;
const volatile uint32_t reg2;
}PERIPH1__t;
#define PERIPH1ADDRESS 0x56664550UL
/* OR */
uintptr_t PERIPH1ADDRESS = 0x56664550UL;
#define PERIPH1 ((PERIPH1__t *)PERIPH1ADDRESS)
/* somewhere in the code */
PERIPH1 -> reg1 = 34;
uint32_t reg2val = PERIPH1 -> reg2;
如果要將地址存盤在整數變數中,最好的型別將uintptr_t是保證容納任何指標的型別。
int已簽名并且在許多系統上不足以存盤地址 - 例如 64 位系統通常具有 64 位地址和只有 32 位整數。
uj5u.com熱心網友回復:
如果你有 a struct foo,簡單的方法是不使用 an ,int x而是將型別設為指向 - 的指標struct foo,struct foo *x。可以使用箭頭運算子直接從有效指標訪問成員。
#include <stdio.h>
struct foo { int a, b; };
int main(void) {
struct foo foo = { 1, 2 };
struct foo *x = &foo;
printf("%d, %d\n", x->a, x->b);
}
有時,硬體要求會使這變得復雜,但這是簡單的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532230.html
標籤:C结构取消引用
上一篇:確定無符號整數的范圍
下一篇:對特定警告撤消-Werror
