c++ - What's the meaning of * and & when applied to variable names? -


सी ++ में, इनके बीच का अंतर क्या है:

  शून्य फ़ंक्शन (मायटाइप & amp;;); // घोषणा // ... MyType * ptr; समारोह (* ptr); // कंपाइलर त्रुटि फ़ंक (पीटीआर) नहीं देते; // कंपाइलर त्रुटि देता है मैंने सोचा & amp; मेमोरी एड्रेस का प्रतिनिधित्व करता है तो // इस स्टेटमेंट को सही होना चाहिए क्योंकि पीटीआर केवल एक पॉइंटर / या कुछ असली वर् का पता है।  

एकरी उपसर्ग ऑपरेटर & amp; , जब ऑब्जेक्ट पर लागू होता है, वस्तु का पता उत्पन्न करता है: & obj । < प्रकार संशोधक & amp; , जब घोषित किए जाने वाले एक चर पर लागू किया जाता है, तो चर प्रकार को संदर्भ प्रकार : int & amp;

यह भी * पर लागू होता है: जब एक संकेतक को एकरी उपसर्ग ऑपरेटर के रूप में लागू किया जाता है, तो यह dereference सूचक: ऑब्जेक्ट को निर्दिष्ट करते हुए: * ptr
जब प्रकार संशोधक के रूप में उपयोग किया जाता है < सूचक : int *

इसी तरह से, जो घोषित किया जा रहा है वह चर प्रकार को संशोधित करने वाला प्रकार संशोधक [] लागू होता है सरणी के लिए, जबकि द्विआधारी इन्फिक्स ऑपरेटर [] ऑरेजेन्ट प्रकार के किसी ऑब्जेक्ट पर लागू होता है, वह एक ऑरेंज के उप-ऑब्जेक्ट्स को एक्सेस करेगा। / P>


यह उपयोगी नहीं है कि प्रकार संशोधक वेरिएबल पर लागू होते हैं जिन्हें घोषित किया जाता है उदाहरण के लिए, यह

  int * p, ** pp, i, a [10], और r = i;   

एक int सूचक को परिभाषित करता है, एक int , एक वेनिला int पर एक सूचक के लिए एक सूचक, 10 int की एक सरणी, और एक int संदर्भ (बाद में तत्काल आरंभ किया गया है, क्योंकि आपके पास एक प्रारंभिक संदर्भ नहीं हो सकता।) ध्यान दें कि प्रकार संशोधक वाक्यों को घोषित वैरिएबल से संबंधित हैं जिसका प्रकार वे संशोधित कर रहे हैं, न कि घोषित चर प्रकार फिर भी, प्रकार संशोधक ( * और & amp; ) प्रकार को चर के संशोधित करें।
निम्नलिखित मामले में, हालांकि, कोड> पी , i , और a पहले से ही घोषित किए गए वेरिएबल के लिए अनुमानित है

  * pp = & amp; मैं; एक [0] = आई;   

* और & amp; unary prefix ऑपरेटर्स dereferencing पीपी और का पता लगाने मैं , जबकि [] पहले int वस्तु को सरणी में a उत्पन्न करता है

तथ्य यह है कि सी और सी ++ सफेद स्थानों के आसपास प्रकार संशोधक के बारे में परवाह नहीं करते हैं और इससे अलग हो शिविर जब उन्हें जगह देने की बात आती है तो वास्तव में चीजों को आसान नहीं बनाता है।
कुछ लोग इस प्रकार के प्रकार के प्रकार के संशोधक को जगह देते हैं उनका तर्क है कि यह प्रकार को संशोधित करता है और इसलिए इसे वहां जाना चाहिए:

  int * ptr;  

नुकसान यह है कि कई वस्तुओं की घोषणा करते समय यह भ्रमित हो जाता है यह

  int * a, b;   

परिभाषित a को int पर एक संकेतक बनने के लिए, लेकिन b एक int । यही वजह है कि कुछ लोग लिखना पसंद करते हैं

  int * ptr; Int * a, * b;  

मैं केवल एक ही बयान में एकाधिक ऑब्जेक्ट की घोषणा नहीं करने का सुझाव देता हूं IMO जो कोड को पढ़ने में आसान बनाता है इसके अलावा, यह आपको या तो सम्मेलन लेने के लिए स्वतंत्र छोड़ देता है। प्रकार के संशोधक और एकरी उपसर्ग ऑपरेटरों & amp; और < कोड> * , बाइनरी इन्फिक्स ऑपरेटर्स & amp; और * हैं, जिसका अर्थ है " Bitwise और "और" गुणा " और चोट के अपमान को जोड़ने के लिए, सी ++ में आप दोनों एकरूप उपसर्ग और बाइनरी इन्फ़िक्स इन दोनों के रूप में कर सकते हैं उपयोगकर्ता-परिभाषित प्रकारों के लिए ऑपरेटर (और बाइनरी इन्फिक्स [] ) और उनके शब्दों के रूप में पूरी तरह से मुक्त हो जाते हैं।


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -