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

C में printf में %p का उपयोग


%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

महत्वपूर्ण नियम

  1. हमेशा (void*) कास्ट करें: %p को void* अपेक्षित है। अन्य पॉइंटर टाइप्स पास करना अनडिफाइंड बिहेवियर है।
  2. फॉर्मेट इम्प्लीमेंटेशन-डिफाइंड: आमतौर पर 0x प्रीफिक्स के साथ हेक्साडेसिमल, लेकिन गारंटीड नहीं।
  3. नल पॉइंटर: (void*)0 या NULL प्रिंट करता है (आमतौर पर 0x0 या (nil))।

गलत उपयोग के उदाहरण

// गलत - कोई कास्ट नहीं
printf("%p", ptr);  // चेतावनी/एरर संभव

// गलत - इंटीजर के लिए %p
printf("%p", 42);  // अर्थहीन

// सही विकल्प इंटीजर के लिए
printf("%x", 42);  // 2a
  1. - C# में yield return का क्या उपयोग है?

    yield कीवर्ड एक कलेक्शन पर कस्टम स्टेटफुल इटरेशन करने में मदद करता है। अर्थात जब हम yield कीवर्ड का उपयोग करते हैं तो कंट्रोल कॉलर फंक्शन से सोर्स और इसके विपरीत आगे-पीछे मूव करता है। उदाहरण using System; using System.Collections.Generic; namespace DemoApplication { class Program {

  1. - C# में is कीवर्ड का उपयोग क्या है?

    is कीवर्ड का उपयोग यह जांचने के लिए किया जाता है कि कोई ऑब्जेक्ट किसी विशिष्ट प्रकार में कास्ट किया जा सकता है या नहीं। ऑपरेशन का रिटर्न प्रकार बूलियन है। उदाहरण using System; namespace DemoApplication{ class Program{ static void Main(){ Employee emp = new PermanentEmpl

  1. - C# में 'using' स्टेटमेंट का उपयोग

    C# में using स्टेटमेंट: रिसोर्स मैनेजमेंट using स्टेटमेंट IDisposable इंटरफेस इम्प्लीमेंट करने वाले ऑब्जेक्ट्स के जीवनचक्र को स्वचालित रूप से प्रबंधित करता है। यह सुनिश्चित करता है कि Dispose() मेथड कॉल हो, भले ही एक्सेप्शन 발생 हो। सिंटैक्स using (ResourceType resource = new ResourceType()) { //