2010-07-14 18 views
28

क्या होता है जब मैं एक पंक्ति पर एकाधिक चर कहता हूं? जैसेसी एकाधिक सिंगल लाइन घोषणाएं

int x, y, z; 

सभी ints हैं। सवाल यह है कि निम्नलिखित कथन में y और z क्या हैं?

int* x, y, z; 

क्या वे सभी इंट पॉइंटर्स हैं?

+0

संपादित प्रश्न, क्योंकि इसका उद्देश्य उद्देश्य सी –

+0

के साथ कुछ लेना देना नहीं है, मुझे पता है कि यहां इस प्रश्न का डुप्लिकेट कहीं भी है (मैंने इसे पहले से पढ़ लिया है) –

उत्तर

59

केवल x int करने के लिए एक सूचक है; y और z नियमित स्याही हैं।

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

int* x, y, z; 

declarators *x, y, और z कर रहे हैं (यह सी वाक्य रचना के एक दुर्घटना है कि आप या तो int* x या int *x, और इस सवाल का कारण है कि मैं दूसरी शैली का उपयोग करना चाहिये कई कारणों में से एक है लिख सकते हैं है)। x, y, और z के पूर्णांक सत्ता, प्रकार निर्दिष्टकर्ता int द्वारा निर्दिष्ट किया जाता है, जबकि x का सूचक सत्ता declarator *x द्वारा निर्दिष्ट किया जाता (IOW, अभिव्यक्ति *x टाइप int है)।

यदि आप सभी तीन वस्तुओं को पॉइंटर्स होना चाहते हैं, तो आपके पास दो विकल्प हैं। आप या तो स्पष्ट रूप से संकेत के रूप में उन्हें घोषणा कर सकते हैं:

int *x, *y, *z; 

या आप एक पूर्णांक सूचक के लिए एक typedef बना सकते हैं:

typedef int *iptr; 
iptr x, y, z; 

बस याद रखें कि जब एक सूचक की घोषणा, * चर नाम का हिस्सा है , प्रकार नहीं।

+1

वास्तव में एक पूर्ण उत्तर और अंतर्निहित प्रश्न के बारे में है कि * प्रकार या चर के लिए है या नहीं। – ruralcoder

8

अपने पहले ही वाक्य में:

int x, y, z; 

वे सब int रों हैं।

हालांकि, दूसरा एक में:

int* x, y, z; 

केवल xint के लिए सूचक है। y और z सादे int एस हैं।

आप उन सभी int रों की ओर इशारा आपको बस इतना करना होना चाहते हैं:

int *x, *y, *z; 
+3

यह एक कारण है 'अंतर * foo; ' वास्तव में गुमराह। इस प्रश्न के उदाहरण में, यह ऐसा लगता है कि 3 चर सभी प्रकार के "int *' "हैं। मैं कहूंगा कि यह अंतर लगभग ए + बी * सी' के रूप में आक्रामक है। –

6

केवल एक्स एक पूर्णांक सूचक है। वाई और जेड सिर्फ int होगा। आप तीन संकेत चाहते हैं:

int * x, * y, * z; 
3

यह जानना महत्वपूर्ण है कि, सी में, घोषणा उपयोग की नकल करती है। * यूनरी ऑपरेटर सी में सही सहयोगी है, उदाहरण के लिए int *x x int int (या int-star) के प्रकार सूचक और int x में, x प्रकार int है।

जैसा कि अन्य ने भी उल्लेख किया है, int* x, y, z; में सी कंपाइलर एक्स को इंट-स्टार और वाई और जेड को पूर्णांक के रूप में घोषित करता है।

संबंधित मुद्दे