मैंने अपने मशीन पर इस कोड को संकलित करने के बाद कुछ अजीब देखा:
#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
।