2017-10-19 20 views
6

मान लीजिए कि a चलो एक सूचक है, और इसके लिए स्मृति आवंटन के बाद, मैं अगर स्मृति सफलतापूर्वक आवंटित किया गया था, मैं यह कर दो तरीके देखा है जाँच करना चाहते हैं:सी में, यह स्थिति है: "अगर (ए! = एनयूएलएल)" स्थिति के समान "अगर (ए)"?

if(a != NULL) 

if(a) 

पहले बीच क्या अंतर है और दूसरा बयान?

+4

वे एक ही चीज़ के रूप में समाप्त हो जाएंगे। – Steve

+0

NULL एक मैक्रो है जिसे आम तौर पर 0 के रूप में परिभाषित किया जाता है, इसलिए पहली अभिव्यक्ति (ए! = 0) के समान होती है, दूसरा यह भी जांचता है कि कोई! = 0 है, तो यह वही संपादन है: आमतौर पर –

+0

हां, यदि * 'a' * एक सूचक है, यदि 'एन' 'NULL' की परिभाषा के आधार पर कोई सूचक नहीं है तो यह अलग हो सकता है। –

उत्तर

0

(ए! = एनयूएलएल) एक बूलियन लौटाता है जो (ए) के लिए एक ही बात है। यदि कोई सामग्री 0 के बराबर होती है और अन्यथा सत्य होती है तो एक कथन गलत होता है। NULL का मतलब है 0 इसलिए यदि एक == 0 यदि झूठी वापसी हो। तो यह संकलक के लिए बिल्कुल वही बात है।

उम्मीद है कि यह आपकी मदद करता है!

0

कोई कार्यात्मक अंतर नहीं है; वे बराबर हैं और वे दोनों शून्य सूचक के लिए परीक्षण करते हैं।

कोई वरीयता पूरी तरह से व्यक्तिपरक है। अपनी परियोजना/संगठन में अपने साथी प्रोग्रामर द्वारा बस अपनी पसंद के किसी भी या उसके बाद क्या करें।

+0

क्या आप थोड़ा सा विस्तार कर सकते हैं? – Marievi

2

स्थिति है: if(a != NULL)if(a) की स्थिति के समान ही है?

वे एक ही उद्देश्य प्राप्त करते हैं। एकमात्र वास्तविक अंतर पठनीयता में है।


उनका प्रभाव वही है, क्योंकि वे एक ही चीज़ के परिणामस्वरूप होंगे।

NULL एक मैक्रो है कि लगभग हमेशा 0 है, तो:

if(a != 0) 

जो सुंदर के समान है::

if(a != NULL) 

के बराबर है

if(a) 

के बाद से यह होगा जांचें कि अभिव्यक्ति a सत्य का मूल्यांकन करती है या नहीं।

तो, यदि a एक सूचक है, तो वे वही होंगे। यदि ऐसा नहीं है, तो यह इस बात पर निर्भर करेगा कि NULL परिभाषित किया गया है (जैसा कि मैंने कहा है almost always 0 है)।

+1

क्या आप थोड़ा सा विस्तार कर सकते हैं? – Marievi

+0

यकीन है कि @ मेरीवी, मेरे रास्ते पर। – gsamaras

1

c faq के अनुसार:

अगर (पी) के समतुल्य होता है (! पी = 0)

और यह एक तुलना संदर्भ है, इसलिए संकलक बता सकता है कि (छुपा हुआ) 0 वास्तव में एक शून्य सूचक स्थिर है, और सही शून्य सूचक मूल्य का उपयोग करें। यहां शामिल कोई ट्रिकरी नहीं है; कंपाइलर्स इस तरह से काम करते हैं, और दोनों संरचनाओं के लिए समान कोड उत्पन्न करते हैं। एक शून्य सूचक का आंतरिक प्रतिनिधित्व कोई फर्क नहीं पड़ता।

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