तकनीकी रूप से बोलना कोई नहीं है printf , प्रत्येक पुस्तकालय अपना स्वयं का कार्यान्वयन करता है, और इसलिए, आपके printfद्वारा किए जा रहे व्यवहार का अध्ययन करने की कोशिश करने का आपका तरीका बहुत काम का नहीं है। आप printfअपने सिस्टम के व्यवहार का अध्ययन करने की कोशिश कर सकते हैं , और यदि ऐसा है, तो आपको दस्तावेज़ीकरण पढ़ना चाहिए, और printfअगर यह आपके पुस्तकालय के लिए उपलब्ध है , तो स्रोत कोड को देखना चाहिए ।
उदाहरण के लिए, मेरी मैकबुक पर, मुझे 1606416304आपके प्रोग्राम के साथ आउटपुट मिलता है ।
यह कहने के बाद कि, जब आप floatकिसी वैरिएड फ़ंक्शन को पास करते हैं, तो floatइसे ए के रूप में पास किया जाता है double। तो, आपका कार्यक्रम aएक के रूप में घोषित होने के बराबर है double।
A के बाइट्स की जांच करने के लिए double, आप एसओ पर यहां एक हालिया प्रश्न का उत्तर देख सकते हैं ।
चलो करते हैं:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
unsigned char *p = (unsigned char *)&a;
size_t i;
printf("size of double: %zu, int: %zu\n", sizeof(double), sizeof(int));
for (i=0; i < sizeof a; ++i)
printf("%02x ", p[i]);
putchar('\n');
return 0;
}
जब मैं उपरोक्त कार्यक्रम चलाता हूं, मुझे मिलता है:
size of double: 8, int: 4
00 00 00 00 00 4a 93 40
तो, पहले चार बाइट्स double0 निकले, जो हो सकता है कि आपको 0अपने printfकॉल के आउटपुट के रूप में मिले ।
अधिक रोचक परिणामों के लिए, हम कार्यक्रम को थोड़ा बदल सकते हैं:
#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 42;
printf("%d %d\n", a, b);
return 0;
}
जब मैं अपनी मैकबुक पर उपरोक्त कार्यक्रम चलाता हूं, तो मुझे यह मिलता है:
42 1606416384
लिनक्स मशीन पर एक ही कार्यक्रम के साथ, मुझे यह मिलता है:
0 1083394560