কম্পিউটার টিউটোরিয়াল

সি/সি++-এ %p এবং %x ফরম্যাট স্পেসিফায়ারের পার্থক্য

printf ফাংশনে পয়েন্টার বা হেক্সাডেসিমাল মান প্রিন্ট করার জন্য %p এবং %x ব্যবহার করা হয়। যেসব সতহে আউটপুট একই দেখতে পারে, তবে তাদের উদ্দেশ্য এবং আচরণ ভিন্ন।

মূল পার্থক্য

বিষয়%p%x
উদ্দেশ্যপয়েন্টার অ্যাড্রেস প্রিন্টআনসাইনড হেক্সাডেসিমাল ইন্টিজার
আর্গুমেন্ট টাইপvoid* (পয়েন্টার)unsigned int
লিডিং জিরোপ্রিন্ট করে (প্যাডিং করে)প্রিন্ট করে না
প্রিফিক্স (0x)কম্পাইলার-নির্ভর (সাধারণত হ্যাঁ)না (ম্যানুয়ালি দিতে হয়)
পোর্টেবিলিটিপয়েন্টার প্রিন্টের জন্য সঠিকপয়েন্টারের জন্য সঠিক নয় (সাইজ মিসম্যাচ হতে পারে)

উদাহরণ

#include <stdio.h>

int main() {
    int x = 59;
    printf("Value using %%p: %p\n", (void*)x); // কাস্ট ভালো অনুশীলন
    printf("Value using %%x: %x\n", x);
    return 0;
}

আউটপুট (৬৪-বিট সিস্টেমে)

Value using %p: 000000000000003B
Value using %x: 3b

ব্যাখ্যা

  • %p: পয়েন্টার সাইজ অনুযায়ী (৬৪-বিটে ১৬ হেক্স ডিজিট) লিডিং জিরো দিয়ে প্রিন্ট করে
  • %x: শুধু মানটি হেক্সে প্রিন্ট করে, লিডিং জিরো বা 0x প্রিফিক্স ছাড়া
  • 59 ডেসিমাল = 3B হেক্স

সঠিক ব্যবহার

  • পয়েন্টার প্রিন্ট করলে: printf("%p", (void*)ptr); — সবসময় void* কাস্ট করুন
  • হেক্স মান প্রিন্ট করলে: printf("%x", val); বা printf("0x%x", val);
  • %p-র আউটপুট ফরম্যাট ইমপ্লিমেন্টেশন-ডিফাইনড (স্ট্যান্ডার্ড নিশ্চিত করে না) — ডিবাগিংয়ের জন্য ঠিক, পার্সিংয়ের জন্য নয়
  1. C++-এ i++ এবং ++i-এর পারফরম্যান্স পার্থক্য কি?

  2. C/C++-এ strncmp() এবং strcmp()-এর পার্থক্য

  3. C/C++-এ #include <filename> এবং #include "filename"-এর পার্থক্য

  4. C/C++-এ const int*, const int * const, int const * পার্থক্য