Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में %p और %x फॉर्मेट स्पेसिफायर का अंतर


%p और %x दोनों हेक्साडेसिमल आउटपुट देते हैं, लेकिन उनके उपयोग और व्यवहार में अंतर है।

तुलना

विशेषता%p (पॉइंटर)%x (हेक्स इंटीजर)
उद्देश्यपॉइंटर एड्रेस प्रिंट करनाअनसाइन्ड इंटीजर को हेक्स में प्रिंट करना
आर्गुमेंट टाइपvoid*unsigned int
लीडिंग जीरोजआमतौर पर पूरे एड्रेस चौड़ाई तक (जैसे 0x00007fff...)नहीं (न्यूनतम चौड़ाई)
प्रीफिक्सइम्प्लीमेंटेशन-डिफाइंड (आमतौर पर 0x)नहीं (जब तक # फ्लैग न हो: %#x)
पोर्टेबिलिटीपॉइंटर्स के लिए सहीपॉइंटर्स के लिए अनडिफाइंड बिहेवियर

उदाहरण

#include <stdio.h>

int main() {
    int x = 59;
    int *ptr = &x;
    
    printf("Value using %%p (int): %p\n", x);        // गलत उपयोग लेकिन काम कर सकता है
    printf("Value using %%x (int): %x\n", x);        // सही: 3b
    printf("Pointer using %%p: %p\n", (void*)ptr);   // सही: 0x7ffc...
    printf("Pointer using %%x: %x\n", (unsigned int)ptr); // 32-बिट पर काम कर सकता है
    
    return 0;
}

आउटपुट (64-बिट सिस्टम)

Value using %p (int): 000000000000003B
Value using %x (int): 3b
Pointer using %p: 0x7ffc12345678
Pointer using %x: 7ffc12345678

सर्वोत्तम अभ्यास

  • पॉइंटर्स के लिए **हमेशा %p और (void*) कास्ट** उपयोग करें।
  • इंटीजर्स के लिए %x (लोअरकेस) या %X (अपरकेस) उपयोग करें।
  • %p का सटीक फॉर्मेट इम्प्लीमेंटेशन-डिफाइंड है (C मानक)।
  1. - C/C++ में strncmp() और strcmp() का अंतर

    strncmp() strncmp() फ़ंक्शन का उपयोग लेफ्ट स्ट्रिंग की तुलना राइट स्ट्रिंग से एक निर्दिष्ट संख्या तक करने के लिए किया जाता है। यह strcmp() की तरह ही काम करता है। जब लेफ्ट स्ट्रिंग के मिलान वाले कैरेक्टर का ASCII मान राइट स्ट्रिंग के कैरेक्टर से अधिक होता है, तो यह शून्य से अधिक मान लौटाता है। जब लेफ

  1. - C/C++ में #include <filename> और #include "filename" में अंतर?

    दोनों रूपों के बीच अंतर उस स्थान में है जहां प्रीप्रोसेसर शामिल की जाने वाली फाइल को खोजता है। #include <filename> प्रीप्रोसेसर एक कार्यान्वयन-निर्भर तरीके से खोजता है, यह कंपाइलर द्वारा पूर्व-निर्दिष्ट निर्देशिकाओं में खोजता है। इस विधि का उपयोग आमतौर पर स्टैंडर्ड लाइब्रेरी हेडर फाइलों को शा

  1. - C/C++ में const int*, const int * const, और int const * में अंतर?

    उपरोक्त प्रतीकों का अर्थ निम्नलिखित है: int* - int का पॉइंटर। यह काफी स्पष्ट है। int const * - const int का पॉइंटर। int * const - int का कॉन्स्ट पॉइंटर। int const * const - const int का कॉन्स्ट पॉइंटर। यह भी ध्यान दें कि: const int * और int const * समान हैं। const int * const और int const * const स