दिलचस्प पोस्ट
AJAX शैली jQuery UI टैब्स के अंदर लोड jQuery UI संवाद विंडो Javascript-function में getElementsByClassName का उपयोग कैसे करें? Xcode स्रोत स्वचालित स्वरूपण कैसे पढ़ा जाए कि PHP में चेकबॉक्स की जाँच की जाती है? आप "admin.py खोल" के माध्यम से इंटरैक्टिव दुभाषिया का उपयोग कर एक Django मॉडल मॉड्यूल को कैसे पुनः लोड करते हैं? ओरेकल डाटाबेस लिंक – MySQL समतुल्य? उच्च स्तर पर, ओएथ 2 कैसे काम करता है? कैसे पता लगाने के लिए कि .NET रनटाइम का उपयोग किया जा रहा है (एमएस बनाम मोनो)? एक माउस के एक्स / वाई निर्देशांक प्राप्त करना एक छवि पर क्लिक करता है कई फाइलों में view.py विभाजित करें यूनिट्स के लिए लिनक्स बनाम ग्रुपजॉइन में शामिल हों जावास्क्रिप्ट निजी विधियों JQuery.browser का उपयोग कर सफ़ारी से क्रोम को भेद मैं गीट में अस्थिर परिवर्तन कैसे छोड़ूं? रनटाइम त्रुटि: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

चार * 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(); 

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

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