मैंने अपने मशीन पर इस कोड को संकलित करने के बाद कुछ अजीब देखा:
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
int a,b,c,d;
int e,f,g;
long int h;
printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x",
&a,&b,&c,&d,&e,&f,&g,&h);
return 0;
}
परिणाम निम्नलिखित है। ध्यान दें कि प्रत्येक अंतर पते के बीच 4-बाइट अंतर है। हालांकि, अंतिम अंतर और लंबे अंतर के बीच 12-बाइट अंतर है:
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeofलिए एक फंक्शन है। printf("size: %d ", sizeof(long));
%x। आपके लिए भाग्यशाली है, यह आपके प्लेटफ़ॉर्म पर सही ढंग से काम करने के लिए होता है, जो सूचक स्ट्रिंग की अपेक्षा करता है unsigned int। लेकिन कई एबीआई में पॉइंटर्स और इनट्स अलग-अलग आकार के होते हैं। %pपोर्टेबल कोड में पॉइंटर्स प्रिंट करने के लिए उपयोग करें । (ऐसी प्रणाली की कल्पना करना आसान है जहां आपका कोड पहले 4 पॉइंटर्स के ऊपरी / निचले हिस्सों को प्रिंट करेगा, सभी के निचले आधे के बजाय 8.)
%zu । @yoyo_fun पते का उपयोग करने के लिए प्रिंट करें%p । गलत प्रारूप निर्दिष्ट का उपयोग करते हुए अपरिभाषित व्यवहार का
intबाद दूसरा लगाएंh। संकलक इसे पहले, अंतराल में डाल सकता हैh।