2010-11-27 9 views
6

char* क्या है, बिल्कुल? क्या यह एक सूचक है? मैंने सोचा कि पॉइंटर्स पहचानकर्ता से पहले तारांकन था, प्रकार नहीं (जो जरूरी नहीं है) ...?`char *` क्या है?

+9

सी रिक्त स्थान की परवाह नहीं करता है, इसलिए 'char * foo;' 'char * foo जैसा है;' –

+6

@PaulTomblin: सी रिक्त स्थान पर ध्यान देता है, बस उस विशेष मामले में नहीं। 'चार सेब; 'और' चापलूसी; 'काफी अलग हैं। –

उत्तर

17

यह char पर एक सूचक है।

पॉइंटर घोषित करते समय, तारांकन प्रकार के बाद और पहचानकर्ता के समक्ष जाता है, व्हाइटस्पेस महत्वहीन होता है। ये सभी char संकेत घोषित:

char *pointer1; 
char* pointer2; 
char * pointer3; 
char*pointer4; // This is illegible, but legal! 

चीजों को और भी अधिक भ्रमित करने के लिए, जब एक साथ कई चर घोषित करने, तारांकन केवल एक ही पहचानकर्ता (इसके दाईं ओर) लागू होता है। उदा .:

char* foo, bar; // foo is a pointer to a char, but bar is just a char 

ऐसा नहीं है कि तारांकन पारंपरिक, तुरंत पहचानकर्ता और न प्रकार के निकट रख दिया गया है के रूप में यह इस भ्रामक घोषणा से बचा जाता है इस कारण के लिए मुख्य रूप से है।

+0

फिर, यह क्यों है कि एक पंक्ति पर एकाधिक पॉइंटर्स घोषित करते समय आपको प्रत्येक के लिए तारांकन का उपयोग करना होगा? उदाहरण के लिए, 'char * सूचक 1, * सूचक 2; '। – Maxpm

+0

@ मैक्सपैम: हे, यह जोड़ने के लिए संपादन कर रहा था जैसा आपने टिप्पणी की थी :-) – Cameron

+0

मुझे अभी भी समझ में नहीं आया कि उन्होंने इसे इस तरह क्यों डिजाइन किया है ... 'char *' मेरे लिए बहुत अधिक प्राकृतिक लगता है (एक प्रकार के रूप में)। – jwueller

15

यह एक चरित्र के लिए एक सूचक है। आप लिख सकते हैं या तो

char* bla; 

या

char *bla; 

यह एक ही है।

अब, सी में, तार के लिए एक पॉइंटर का उपयोग स्ट्रिंग के लिए किया जाता था: स्ट्रिंग का पहला अक्षर होगा जहां पॉइंटर इंगित करता है, अगला पता जो अगला आता है, आदि में अगला चरित्र, नल तक -टर्मिनल-प्रतीक \0 पहुंचा गया था।

लेकिन: सी ++ में ऐसा करने की कोई आवश्यकता नहीं है। इसके बजाय std :: स्ट्रिंग (या समान वर्ग) का उपयोग करें। चार * सामान को सुरक्षा कीड़े के लिए एकल सबसे लगातार स्रोत नाम दिया गया है!

+1

मैं वही उत्तर पोस्ट करने वाला था – Ramilol

1

http://cplusplus.com/doc/tutorial/pointers/

* चरित्र दो अलग-अलग स्थानों में दिखाई देता है जब संकेत के साथ काम कर। सबसे पहले, "पॉइंटर टू टी" को T* द्वारा टाइप किया गया है (टाइप नाम पर * जोड़ना)। दूसरा, जब एक पॉइंटर को संदर्भित किया जाता है, जो * को पॉइंटर वैरिएबल के नाम पर प्रीपेड करके किया जाता है जिसे आप हटाना चाहते हैं।

1

व्हाइटस्पेस सामान्य रूप से कोई फर्क नहीं पड़ता, इसलिए

char* suchandsuch; 

char *suchandsuch; 

char 
* 
suchandsuch; 

सब एक ही हैं।

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