दिलचस्प पोस्ट
बूलियन अभिव्यक्ति (व्याकरण) पार्सर में सी ++ XDocument से XML नोड कैसे प्राप्त करें IPhone के लिए NSTask या समकक्ष MongoDB के साथ सरणी से विशिष्ट आइटम निकाल रहा है दृश्य स्टूडियो में मिलान ब्रेस पर जाएं? SASS के साथ किसी संख्या को एक प्रतिशत में कैसे परिवर्तित किया जाए? पायथन में स्ट्रिंग से पहले एक स्ट्रिंग प्रिंटिंग 'यू' प्रिंट करना है? Bash: एक स्ट्रिंग से सही उद्धृत / बचें तर्क पढ़ना आखिर क्यों नहीं होता है () अंत कभी नहीं? स्विफ्ट में खाली स्ट्रिंग की जांच करें? बैच फ़ाइल: ढूँढें यदि उपस्ट्रिंग स्ट्रिंग में है (फ़ाइल में नहीं) जावा में अपवादों के लिए कीवर्ड फेंकता है MATLAB सबप्लॉट मार्जिन तालिका से जानकारी चुनें जहां पंक्ति की अधिकतम तिथि है सीएसएस-चयनकर्ता और एक्सपाथ के बीच अंतर क्या है? जो बेहतर है (प्रदर्शन के अनुसार और क्रॉस ब्राउज़र परीक्षण के लिए)?

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

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

char* var; char *var; 

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

Solutions Collecting From Web of "चार * 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(); 

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

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