%p फॉर्मेट स्पेसिफायर printf परिवार में पॉइंटर एड्रेस प्रिंट करने के लिए मानक तरीका है।
सही उपयोग
#include <stdio.h>
int main() {
int x = 50;
int *ptr = &x;
// सही: void* कास्ट के साथ %p
printf("Address: %p, Value: %d\n", (void*)ptr, *ptr);
// अन्य पॉइंटर टाइप्स
char *cptr = "Hello";
double *dptr = malloc(sizeof(double));
printf("Char ptr: %p\n", (void*)cptr);
printf("Double ptr: %p\n", (void*)dptr);
free(dptr);
return 0;
}
आउटपुट
Address: 0x7ffc12345678, Value: 50 Char ptr: 0x55a1b2c3d4e0 Double ptr: 0x55a1b2c3d4f0
महत्वपूर्ण नियम
- हमेशा
(void*)कास्ट करें:%pकोvoid*अपेक्षित है। अन्य पॉइंटर टाइप्स पास करना अनडिफाइंड बिहेवियर है। - फॉर्मेट इम्प्लीमेंटेशन-डिफाइंड: आमतौर पर
0xप्रीफिक्स के साथ हेक्साडेसिमल, लेकिन गारंटीड नहीं। - नल पॉइंटर:
(void*)0याNULLप्रिंट करता है (आमतौर पर0x0या(nil))।
गलत उपयोग के उदाहरण
// गलत - कोई कास्ट नहीं
printf("%p", ptr); // चेतावनी/एरर संभव
// गलत - इंटीजर के लिए %p
printf("%p", 42); // अर्थहीन
// सही विकल्प इंटीजर के लिए
printf("%x", 42); // 2a