करते हुए मैं कारण है कि याद आती है कर ...
तो शायद एक सामान्य नियम के रूप में:
const
हमेशा यह को संदर्भित करता है पूर्ववर्ती टोकन है।
- मामले में ऐसी कोई नहीं है, यह "consting" है यह उत्तराधिकारी है टोकन के बजाय।
यह नियम वास्तव में आपको पॉइंटर को कॉन्स्ट पॉइंटर्स या कुछ समान रूप से साफ करने के लिए आपकी मदद कर सकता है।
वैसे भी, इसे ध्यान में रखकर, यह स्पष्ट होना चाहिए क्यों
struct Person *const person = NULL;
एक परिवर्तनशील struct करने के लिए एक स्थिरांक सूचक की घोषणा की।
, इसके बारे में सोचो अपने typedef "समूह" सूचक टोकन *
साथ struct Person
।
const [struct Person *]person = NULL;
const
के लिए कुछ भी नहीं बचा है, यह टोकन deklares यह सही struct Person *
निरंतर है करने के लिए: तो,
const PersonRef person = NULL;
अपने संकलक लिखने के लिए इस (छद्म कोड) की तरह कुछ देखता है।
खैर मुझे लगता है, यही कारण है कि मैं typedefs द्वारा संकेत छुपा पसंद नहीं है, जब तक मैं इस तरह के रूप typedefs की तरह करते हैं।
typedef struct Person { ... } Person;
const Person *person; /*< const person */
Person *const pointer; /*< const pointer to mutable person */
और यह संकलक और मनुष्यों के लिए बिल्कुल स्पष्ट होना चाहिए, आप क्या कर रहे हैं।
"लेकिन स्थिरांक कीवर्ड सूचक स्थिरांक नहीं करना चाहिए।" है ना? संक्षिप्त उत्तर: टाइपपीफ का उपयोग न करें, वे केवल आपको भ्रमित करने के लिए हैं। उन्हें याद रखें जब तक आपको उनकी आवश्यकता न हो। – wildplasser
@ विल्डप्लेसर: "टाइपपीफ का उपयोग न करें" अच्छी सलाह नहीं है। शायद "टाइपिफ के पीछे पॉइंटर्स छुपाएं" अधिक उपयुक्त है ... –
मैं अलग होना चाहता हूं। यह * एक अच्छी सलाह है। एक टाइपपीफ के पीछे छिपाने वाले structs सिर्फ छिपाने वाले पॉइंटर्स के रूप में उलझन में है। यह केवल आपके मानसिक नामस्थान को प्रदूषित करने में कार्य करता है। सिंटैक्स हाइलाइटिंग के बिना भी मैंने "स्ट्रक्चर व्यक्ति * पी" को आसान और तेज़ "पीपीर्सन पी" पढ़ा। – wildplasser