我的結構和函式宣告如下
typedef struct myStruct
{
//Some attributes
}myStruct_t, *pMyStruct_t;
void func(myStruct_t* someStruct);
當我如下宣告一個結構指標并將其傳遞給函式時,一切都很好
volatile pMyStruct_t pStruct;
但是當我以這種方式宣告指標時,我得到一個錯誤,即函式中的 volatile 限定符被丟棄
volatile myStruct_t* pStruct;
我想我的問題是第一種方法如何作業并且沒有引發限定符錯誤?pStruct
宣告變數的兩種方式有什么區別?
uj5u.com熱心網友回復:
這些宣告
volatile pMyStruct_t pStruct;
和
volatile myStruct_t* pStruct;
是不同的。
第一個意思如下
myStruct_t* volatile pStruct;
也就是說,在第一個宣告中,指標本身是易失的,而在第二個宣告中,指標本身不是易失的。
您可以使用本身是 volatile 的指標的值來初始化函式引數。但是您不能丟棄指向物件的限定符
uj5u.com熱心網友回復:
第一個
volatile pMyStruct_t pStruct;
創建一個通過副本傳遞給您的函式的volatile
變數。它指向的記憶體不是。pstruct
volatile
第二個
volatile myStruct_t* pStruct;
定義一個指向volatile
記憶體的指標。
這些是非常不同的。
這也說明了為什么將指標型別隱藏到typedef
.
uj5u.com熱心網友回復:
volatile pMyStruct_t pStruct;
此代碼等效于:
myStruct_t* volatile pStruct;
這有一點不同:
volatile myStruct_t* pStruct;
區別在于,哪個變數將是易變的。在第一種情況下,指向結構本身的指標將是易失的。在第二種情況下,結構物件將是易失的,而不是指標。在我看來,第二個選擇是你的。無論如何,使指標易失幾乎沒有意義。
您可以typedef
使用 volatile 關鍵字進行指標:
typedef volatile struct myStruct
{
//Some attributes
}myStruct_t, *pMyStruct_t;
但在這種情況下, struct 將始終是易變的,我不知道這對你來說是否可以接受。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496578.html
上一篇:如果沒有對指向的值的共享參考,為什么取消參考原始指標會產生分段錯誤?
下一篇:RequestError:RequestError(400,search_phase_execution_exception未能為elasticsearch中的輸入字串創建查詢