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

সি ভাষায় পয়েন্টার দিয়ে অ্যারিথমেটিক অপারেশন

পয়েন্টার এরিথমেটিক (Pointer Arithmetic)

পয়েন্টার ভেরিয়েবল এক্সপ্রেশনে ব্যবহার করা যায়। যেকোনো পয়েন্টার যখন ইনক্রিমেন্ট/ডিক্রিমেন্ট করা হয়, তখন সেটি তার পয়েন্ট করা ডেটা টাইপের সাইজ অনুযায়ী এগিয়ে/পিছিয়ে যায়।

বৈধ অপারেশনগুলো

অপারেশনবিবরণ
*p1 + *p2দুই ভ্যালুর যোগ
*p1 - *p2দুই ভ্যালুর বিয়োগ
*p1 * *p2গুণ
*p1 / *p2ভাগ (নোট: / * এর মাঝে স্পেস দিন, নাহলে কমেন্ট মনে হবে)
p1 + nপয়েন্টার n এলিমেন্ট ফরওয়ার্ড
p2 - nপয়েন্টার n এলিমেন্ট ব্যাকওয়ার্ড
p1 - p2দুই পয়েন্টারের মধ্যে এলিমেন্ট সংখ্যা (সেইম অ্যারেতে থাকতে হয়)
p1++, --p2ইনক্রিমেন্ট/ডিক্রিমেন্ট
p1 > p2, p1 == p2তুলনা (সেইম অ্যারেতে অর্থবহ)

অবৈধ অপারেশনগুলো

  • p1 + p2 (দুই এড্রেস যোগ করা অর্থহীন)
  • p1 * p2, p1 / p2
  • p1 / 3 (পয়েন্টার কনস্ট্যান্ট দিয়ে ভাগ করা যায়না)

উদাহরণ প্রোগ্রাম

#include <stdio.h>

int main() {
    int a = 12, b = 4;
    int *p1 = &a, *p2 = &b;
    int x, y;

    x = *p1 * *p2 - 6;   // 12*4 - 6 = 42
    y = 4 - *p2 / *p1 + 10; // 4 - 4/12 + 10 = 4 - 0 + 10 = 14 (ইন্টিজার ডিভিশন)

    printf("Address of a = %p\n", (void*)p1);
    printf("Address of b = %p\n", (void*)p2);
    printf("a = %d, b = %d\n", a, b);
    printf("x = %d, y = %d\n", x, y);

    return 0;
}

আউটপুট

Address of a = 0x7ffc1234
Address of b = 0x7ffc1238
a = 12, b = 4
x = 42, y = 14

ব্যাখ্যা

  • *p1 = 12, *p2 = 4
  • x = 12 * 4 - 6 = 48 - 6 = 42
  • y = 4 - 4/12 + 10 = 4 - 0 + 10 = 14 (ইন্টিজার ডিভিশনে ৪/১২ = ০)

সারসংক্ষেপ

  • পয়েন্টার এরিথমেটিক শুধু একই অ্যারে/অবজেক্টের মধ্যে অর্থবহ।
  • p1 - p2 দিয়ে এলিমেন্ট দূরত্ব পাওয়া যায়।
  • ভ্যালু এক্সেসের জন্য ডিরেফারেন্স (*) ব্যবহার করুন।
  1. C প্রোগ্রামিং ভাষায় অ্যারে অফ পয়েন্টার্স ব্যাখ্যা

  2. স্ট্রাকচার কনসেপ্ট ব্যবহার করে সি ভাষায় বিট ফিল্ড ব্যাখ্যা

  3. পাইথনে OpenCV ব্যবহার করে ছবিতে গাণিতিক অপারেশন

  4. পাইথনে OpenCV দিয়ে ছবিতে গাণিতিক অপারেশন (যোগ ও বিয়োগ)