2011-04-24 11 views
31

मेरे पास struct str *s है;क्या ब्रांटर से स्ट्रक्चर सदस्य का पता "& (s-> var)" बनाम "और s-> var" में स्ट्रक्चर सदस्य का पता प्राप्त करने के लिए आवश्यक है?

vars में एक चर हो। &s->var&(s->var) के बराबर है?

+0

http://en.cppreference.com/w/c/language/operator_precedence –

उत्तर

6

हां।

(-> & की तुलना में अधिक पूर्वता है http://cppreference.com/wiki/language/operator_precedence देखें।)

+0

हालांकि लिंक सी ++ ऑपरेटर पूर्वता के लिए है, इस सवाल का जवाब इस तरह के रूप और उन ऑपरेटरों के साथ सहमत हैं (पता -of) और -> (सदस्य चयन) जो सी एसी ऑपरेटर प्राथमिकता तालिका के लिए आम हैं [इन वर्ग नोट्स में] [http://www.difranco.net/cop2220/op-prec.htm) और यह भी हो सकता है [विकिपीडिया लेख] से अनुमानित (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B) जो उन्हें एक साथ-साथ रखता है। – hardmath

37

व्यवहार के लिहाज से, हाँ वे the member access -> operator has a higher precedence than the address-of & operator के बाद से बराबर हैं।

पठनीयता-वार, दूसरा &(s->var)&s->var से अधिक पढ़ने योग्य है और इसे पहले फॉर्म पर प्राथमिकता दी जानी चाहिए। दूसरे फॉर्म के साथ, &(s->var), आपको यह अनुमान लगाने की आवश्यकता नहीं होगी कि यह वास्तव में क्या कर रहा है क्योंकि आप जानते हैं कि कोष्ठक में अभिव्यक्ति हमेशा मूल्यांकन की जाती है। संदेह में, ब्रांड्स का उपयोग करें।

+6

+1 यदि आपको ऑपरेटर प्राथमिकता के बारे में पूछना है, तो इसका अर्थ स्पष्ट करने के लिए संश्लेषित करें। यही वह है जो मैं हमेशा नए डेवलपर्स को बताता हूं। – Lou

+1

मुझे लगता है कि '& s-> var' अधिक पठनीय –

+0

दृश्यमान' & s-> var' कम अव्यवस्थित है। लेकिन 'और (एस-> var) 'आपके इरादे को बेहतर दिखाता है। कंस्ट्रैसिस के बिना, आपको थोड़ा मानसिक तनाव हो सकता है: "क्या' '' '' '' '' '' '' '' '' '' '' '' '' 'है। भले ही यह केवल एक सेकंड का अंश हो, फिर भी वह मायने रखता है और कभी-कभी आपको मानसिक रूप से तनाव महसूस कर सकता है "ओह, मुझे मूर्खतापूर्ण, मैं इसे कैसे भूल सकता हूं ..."। आजकल मैं शायद ही कभी सी/सी ++ में प्रोग्राम करता हूं, और अन्य भाषाओं में पता ऑपरेटर नहीं होता है, इसलिए इसे भूलना आसान है। यही कारण है कि मैं सामान्य रूप से सी/सी ++ में ब्रांड्स का उपयोग करता हूं - बस बाद में शर्मिंदा होने से बचने के लिए :) – JustAMartin

3

हां, क्योंकि पॉइंटर ड्रेफरेंस ऑपरेटर -> में पता ऑपरेटर & की तुलना में अधिक प्राथमिकता है।

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