2016-05-26 8 views
5

मैं कुछ शोध कर रहा हूं और मुझे कोई अच्छा जवाब नहीं मिला है और मैं कुछ बेहतर समझने की उम्मीद कर रहा हूं। मुझे पता है कि volatile का उपयोग कैसे करें, लेकिन इसके बारे में एक प्रश्न है कि जब यह प्लेसमेंट परिवर्तनीय घोषणाओं में भिन्न होता है, उदाहरण के लिए।सी ++ वैरिएबल टाइप क्वांटिफायर स्थिति वैरिएबल डेफिनिशन

  • volatile int * ptr;

पूर्णांक volatile है की ओर इशारा किया और जब पढ़ने/इस स्मृति स्थान के लिए लिख हमेशा स्मृति स्थान में जाते हैं।

  • int * volatile ptr;

सूचक मान के volatile है और जब पढ़ने/इस स्मृति स्थान के लिए लिख हमेशा स्मृति स्थान में जाते हैं।

यह एक सूक्ष्म अंतर है, लेकिन जो मैं अंतर बता सकता हूं उससे कुछ ऐसा है।

volatile int * foo; 
int * volatile bar; 
volatile int testInt = 5; 
------------------------ 
|   0x020   | - 0x000 (foo), memory location 0x000 can be cached. 
------------------------ 
|   0x020   | - 0x010 (bar), memory location 0x010 can't be cached. 
------------------------ 
|   5   | - 0x020 (testInt) 
------------------------ 

मेरा प्रश्न यह है कि अगर अस्थिर क्वांटिफ़ायर पॉइंटर प्रकार पर नहीं है, उदाहरण के लिए।

volatile int foo = 5; 
int volatile bar = 5; 
------------------------ 
|   5   | - 0x000 (foo), memory location 0x000 can't be cached. 
------------------------ 
|   5   | - 0x004 (bar), memory location 0x004 can't be cached. 
------------------------ 

इन दो घोषणाओं को गैर-सूचक घोषणाओं के लिए एक ही चीज़ नहीं है?

+2

हाँ वे एक ही बात करते हैं पर। –

+1

क्या आपका प्रश्न अभी है - 'int volatile' के समान प्रकार 'अस्थिर int' है? – Barry

उत्तर

2

हां, संशोधक कीवर्ड ऑर्डर लचीला है। यह बाएं या दाईं ओर दाईं ओर एक ही चीज़ करता है। एक ही चीज़ कॉन्स के लिए जाती है।

मैं संशोधक, प्रकार के बाद पसंद करते हैं क्योंकि यह अनुमति देता है आप सादे-अंग्रेजी परिभाषा पाने के लिए दाएं से बाएं पढ़ने के लिए।

int volatile * foo; // "foo is a pointer to a volatile int" 
int * volatile foo; // "foo is a volatile pointer to an int" 
int const * foo; // "foo is a pointer to a constant int" 
int * const foo; // "foo is a constant pointer to an int" 

तो मैं स्वयं को मानकीकृत

int volatile foo;