2010-02-04 15 views
6

मैंने देखा लेकिन एक सभ्य जवाब नहीं मिला।printf कैसे काम करता है?

मैं सोच रहा था कि कैसे इस तरह के मामले में printf काम करता है:

char arr[2] = {5,6}; 

printf ("%d%d",arr[0],arr[1]); 

मैं कि printf सोच रहा था बस प्रारूप के माध्यम से चलता है और जब यह उदाहरण के लिए% d encouter यह यह की वर्तमान स्थिति से 4 बाइट पढ़ता है। .. हालांकि यह गलत तरीके से होना चाहिए क्योंकि उपरोक्त काम पूरी तरह से काम करता है।

तो, मैं कहां गलत हूं?

+0

'int' को 4 बाइट्स की आवश्यकता नहीं है। –

उत्तर

9

आप सही हैं। लेकिन argument promotion है जो आपके char में परिवर्तित होता है: int में: जब उन्हें "varargs" फ़ंक्शन जैसे printf() के साथ उपयोग किया जाता है।

+0

इसके अलावा, फ्लोट को युगल में बढ़ावा दिया जाता है। –

1

आप जब कहते हैं:

printf ("%d%d",arr[0],arr[1]); 

स्ट्रिंग और दो सरणी भाव का मूल्यांकन का परिणाम ढेर पर रखा जाता है और printf कहा जाता है। printf स्टैक से स्ट्रिंग लेता है और अनुक्रम में अन्य स्टैक्ड तर्कों तक पहुंचने के लिए इसमें% स्वरूपण का उपयोग करता है। वास्तव में यह कैसे निर्भर करता है, जैसा कि आप वास्तविक% मान पर कहते हैं - उदाहरण के लिए, %d 4 बाइट्स पढ़ता है लेकिन %f 8 पढ़ता है (अधिकांश 32-बिट आर्किटेक्चर के लिए)।

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