यहां बहुत सी चीजें हो रही हैं। जैसा कि अन्य ने कहा है, printf()
अभिव्यक्ति 5+"Good Morning"
अभिव्यक्ति के बारे में कुछ भी नहीं जानता है। उस अभिव्यक्ति का मूल्य सी भाषा द्वारा निर्धारित किया जाता है।
पहले, a+b
, b+a
रूप में ही है इसलिए 5+"Good Morning"
"Good Morning"+5
के समान है।
अब, "Good Morning"
(यानी, एक स्ट्रिंग अक्षर) का प्रकार "char
" का सरणी है। विशेष रूप से, "Good Morning"
एक 13-वर्ण सरणी (12 "नियमित" वर्ण है, उसके बाद 0
)। जब अधिकांश अभिव्यक्तियों में उपयोग किया जाता है, तो type of an array in C अपने पहले तत्व के लिए सूचक के लिए "क्षय", और बाइनरी अतिरिक्त एक ऐसा मामला है।इसका मतलब यह है कि "Good Morning"+5
में, "Good Morning"
अपने पहले तत्व के लिए एक सूचक के लिए क्षय, जो चरित्र G
है।
0 1 2 3 4 5 6 7 8 9 0 1 2
+---+---+---+---+---+---+---+---+---+---+---+---+---+
| G | o | o | d | | M | o | r | n | i | n | g | 0 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+
G
प्लस 5 पते का मूल्य एक सूचक है कि जो M
है ऊपर G
से 5 स्थानों, ओर इशारा करता है:
यहाँ कैसे स्मृति लग रहा है की तरह है। तो, printf()
एक पता प्राप्त कर रहा है जो M
पर है। printf()
प्रिंट करता है कि जब तक यह 0
नहीं मिलता है। इसलिए आप आउटपुट के रूप में Morning
देखते हैं।
स्रोत
2010-07-26 08:30:32
+1 इसे डंबिंग नहीं करने के लिए +1 (esp। "अधिकांश अभिव्यक्तियों में, सी" decays "में एक सरणी के प्रकार को अपने पहले तत्व के लिए" ला ला ला "के बजाय, एक सरणी एक पॉइंटर, ला ला ला ") – detly