यह सी सिंटैक्स का दुर्घटना है जिसे आप इसे किसी भी तरह लिख सकते हैं; हालांकि, यह हमेशा
Type (*pointer);
है कि के रूप में पार्स किया जाता है, *
हमेशा declarator, नहीं प्रकार निर्दिष्टकर्ता के लिए बाध्य है। यदि आप
Type* pointer1, pointer2;
ने लिखा कि यह रूप में
Type (*pointer1), pointer2;
इसलिए केवल pointer1 एक सूचक प्रकार के रूप में घोषित किया जाएगा पार्स किया जाएगा।
सी "घोषणा नकल उपयोग" प्रतिमान का पालन करता है; घोषणा की संरचना को जितना संभव हो सके कोड में उपयोग की जाने वाली समतुल्य अभिव्यक्ति की नकल करना चाहिए। उदाहरण के लिए, यदि आपके पास arr
नामित int के लिए पॉइंटर्स की एक सरणी है, और आप सरणी में i'th तत्व द्वारा इंगित पूर्णांक मान को पुनर्प्राप्त करना चाहते हैं, तो आप सरणी को सब्सक्राइब करेंगे और परिणाम को dereference करेंगे, जो *arr[i]
के रूप में लिखा गया है (*(arr[i])
के रूप में पार्स किया गया)। अभिव्यक्ति*arr[i]
int
है के प्रकार, तो arr
के लिए घोषणा
int *arr[N];
रास्ता कौन सा सही है के रूप में लिखा है? इस पर निर्भर करता है कि आपने किससे पूछा है। मेरे जैसे पुराने सी farts T *p
का पक्ष है क्योंकि यह व्याकरण में वास्तव में क्या हो रहा है दर्शाता है। कई सी ++ प्रोग्रामर T* p
का पक्ष लेते हैं क्योंकि यह p
के प्रकार पर जोर देता है, जो कई परिस्थितियों में अधिक प्राकृतिक महसूस करता है (मेरे स्वयं के कंटेनर प्रकार लिखने के बाद, मैं बिंदु देख सकता हूं, हालांकि यह अभी भी मुझे गलत लगता है)।
आप एक से अधिक संकेत घोषित करने के लिए चाहते हैं, तो आप या तो उन सब को स्पष्ट रूप से इस तरह के रूप घोषणा कर सकते हैं,:
T *p1, *p2, *p3;
या आप एक typedef बना सकते हैं:
typedef T *tptr;
tptr p1, p2, p3;
हालांकि मैं व्यक्तिगत रूप से नहीं है सिफारिश करें; यदि आप सावधान नहीं हैं तो टाइपिफ के पीछे कुछ चीज के पॉइंटर-नेस को छिपाना आपको काट सकता है।
संभावित डुप्लिकेट [सी ++ में पॉइंटर घोषणाएं: तारांकन की नियुक्ति] (http://stackoverflow.com/questions/180401/pointer-declarations-in-c-placement-of-the-asterisk) – Qadi