तकनीकी रूप से बोलना कोई नहीं है 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
तो, पहले चार बाइट्स double
0 निकले, जो हो सकता है कि आपको 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