दिलचस्प पोस्ट
मैं बेस 64 एन्कोडेड स्ट्रिंग को कैसे डीकोड कर सकता हूं? jquery ui datepicker और mvc दृश्य मॉडल प्रकार datetime JSF में घटक बाध्यकारी क्या है? जब इसे इस्तेमाल किया जाना पसंद है? लिंक्डलिस्ट को इंटेंट अतिरिक्त में डाल दिया जाता है, अगली गतिविधि में पुनः प्राप्त करते समय एरेएललिस्ट को पुनः प्राप्त किया जाता है बंडल निर्माण के बाद Symfony3 ClassNotFound अपवाद जैक्सन का उपयोग ऑब्जेक्ट की सरणी को कैसे करना है Mercurial और Git के बीच अंतर क्या है? जावास्क्रिप्ट टाइमज़ोन जानकारी अमेरिका / लॉस_एजेलस (या समकक्ष) कैसे प्राप्त करें सिद्धांत 2: संदर्भ तालिका में अतिरिक्त कॉलम के साथ कई-से-कई संभाल करने का सर्वोत्तम तरीका जावास्क्रिप्ट से ध्वनि चलाने के लिए क्रॉस-प्लेटफॉर्म, क्रॉस-ब्राउज़र तरीका? क्या मैं एक सीएसएस चयनकर्ता को कोई विशिष्ट वर्ग नहीं होने वाले तत्वों का चयन कर सकता हूं? JQuery में बाइंड और लाइव विधियों के बीच अंतर क्या है? `Git push origin 'का क्या परिणाम है? file_get_contents () UTF-8 वर्ण टूटता है क्या मुझे सर्वोलेट आउटपुटस्ट्रीम को बंद करना चाहिए?

चार * var के बीच का अंतर; और चार * var ;?

बस सोच रहा था कि इसमें कोई अंतर है:

char* var; char *var; 

या यह वरीयता (अंतर) का मामला है?

वेब के समाधान से एकत्रित समाधान "चार * var के बीच का अंतर; और चार * var ;?"

इस मामले में कोई अंतर नहीं है। हालांकि, आपको char *var; पसंद करना चाहिए char *var;

यह इसलिए है क्योंकि * वे चर नाम के साथ अधिक निकटता से जुड़ा हुआ है और आधार प्रकार का हिस्सा नहीं है । उदाहरण के लिए, यदि आप ऐसा करते हैं:

 char* a, b; 

आपके पास क्या a , एक पॉइंटर-टू- char , और b , एक char । यह भ्रामक है! चूंकि * चरित्र char कीवर्ड के करीब है, हम अपेक्षा करते हैं कि दोनों चर के प्रकार सूचक-से- char , लेकिन * वास्तव में केवल a साथ जुड़ा हुआ है (यह char a[10], b; समान है char a[10], b; जैसा कि टिप्पणियों में टेंपिक द्वारा बताया गया है, [10] स्पेसिफायर इसी तरह केवल a के साथ जुड़ा हुआ a , और इसलिए केवल a सरणी होगा।)

सही घोषणा होगी:

 char *a, *b; 

चर के करीब * निर्दिष्टकर्ता को डालने का मतलब है कि यह देखना आसान है कि जब आप एक चर के लिए चाहते हैं तो एक संकेतक बनने के लिए और दूसरा नहीं:

 char *a, b; 

इस मामले में यह स्पष्ट है कि b का उद्देश्य एक सूचक नहीं था। मूल उदाहरण ( char* a, b; ) में, हमें पता नहीं है कि प्रोग्रामर को b लिए एक संकेतक बनना है या नहीं। डगलस क्रॉकफोर्ड से उधार लेने के लिए, हम सभी जानते हैं कि प्रोग्रामर अक्षम है

कुछ लोगों को * पहले और बाद में स्थान देना पसंद है:

 char * a, * b; 

यह उसी समस्या का शिकार है जो कि ऊपर वर्णित है: यदि b एक सूचक नहीं है तो घोषणा ( char * a, b; ) भी प्रोग्रामर के इरादे के बारे में अनिश्चितता का कारण बन सकती है इसलिए मैं सुझाव देता हूं कि * और चर नाम 1 के बीच कोई स्थान न रखें।

किसी भी तरह से आप इसे देखो, char* var; को बुरे शैली के रूप में माना जाना चाहिए यह भाषा विनिर्देश के अनुसार व्याकरणिक रूप से सही है, लेकिन अपठनीय कोड की ओर जाता है क्योंकि यह दर्शाता है कि * निर्दिष्टकर्ता एक ही घोषणा में सभी चर द्वारा साझा किए गए प्रकार का हिस्सा है, जब यह नहीं है। (यह एक समान पंक्ति पर एक जटिल कार्य लिखना जैसा है – यह काम करता है, लेकिन यह एक बुरा विचार है। ऐसे मामलों में जहां पठनीयता और रखरखाव व्यक्तिगत स्टाइलिश प्राथमिकता को पार करती है, और यह उनमें से एक है।)


1 व्यक्तिगत रूप से, मैं फ़ंक्शन रिटर्न वैल्यू से निपटने के समय केवल * बाद एक स्थान देना पसंद करता हूं:

 char * foo(); 

यह स्पष्ट नहीं है: यह एक ऐसा फ़ंक्शन होता है जो एक पॉइंटर-टू-चार्ल्स देता है।

 char *foo(); 

क्या प्रोग्रामर का मतलब एक ऐसा फ़ंक्शन होता है जो एक पॉइंटर-टू-चार् रिटर्न करता है, या क्या उसको एक फ़ंक्शन के लिए पॉइंटर बनाने का मतलब था जो कि रिटर्न देता है? भाषा इसे दूसरे प्रोटोटाइप के समान समझाएगी, लेकिन हमारा लक्ष्य पठनीयता है, और इसका मतलब है कि हम लोगों के लिए वास्तव में क्या संदेश दें, न कि कंपाइलर।

कोई फर्क नहीं है, वरीयता की बात है, जैसा कि आपने स्वयं कहा था