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

C ভাষায় বিভিন্ন পয়েন্টার অপারেশন এবং পয়েন্টার সমস্যা ব্যাখ্যা


একটি পয়েন্টার হল একটি ভেরিয়েবল যার মান অন্য একটি ভেরিয়েবলের ঠিকানা, অর্থাৎ মেমরি লোকেশনের ডায়রেক্ট অ্যাড্রেস। যেকোনো ভেরিয়েবল বা কনস্ট্যান্টের মতো, আপনাকে কোনো ভেরিয়েবল অ্যাড্রেস সংরক্ষণ করার জন্য এটি ব্যবহার করার আগে একটি পয়েন্টার ডিক্লেয়ার করতে হবে।

নিচের স্টেটমেন্টটি বিবেচনা করুন:

int qty = 179;

মেমরিতে ভেরিয়েবলের রিপ্রেজেন্টেশন নিম্নরূপ:

C ভাষায় বিভিন্ন পয়েন্টার অপারেশন এবং পয়েন্টার সমস্যা ব্যাখ্যা

আপনি নিম্নরূপ একটি পয়েন্টার ডিক্লেয়ার করতে পারেন:

int *p;

এর মানে 'p' হল একটি পয়েন্টার ভেরিয়েবল যা অন্য একটি ইন্টিজার ভেরিয়েবলের ঠিকানা ধারণ করে।

অ্যাড্রেস অপারেটর (&) পয়েন্টার ভেরিয়েবল ইনিশিয়ালাইজ করতে ব্যবহৃত হয়।

উদাহরণস্বরূপ:

int qty = 175; int *p; p = &qty;

C ভাষায় বিভিন্ন পয়েন্টার অপারেশন এবং পয়েন্টার সমস্যা ব্যাখ্যা

ভেরিয়েবলের মান অ্যাক্সেস করতে ইন্ডিরেকশন অপারেটর (*) ব্যবহৃত হয়।

উদাহরণস্বরূপ:

C ভাষায় বিভিন্ন পয়েন্টার অপারেশন এবং পয়েন্টার সমস্যা ব্যাখ্যা

'*' কে "value at address" হিসেবে বিবেচনা করা যায়।

নিচের দুটি স্টেটমেন্ট নিচের স্টেটমেন্টের সমতুল্য:

p = &qty; n = *p; n = qty

বিভিন্ন পয়েন্টার অপারেশন

C ভাষায় পয়েন্টার অপারেশনগুলো নিচে ব্যাখ্যা করা হল:

  • অ্যাসাইনমেন্ট - & (অ্যাড্রেস অপারেটর) ব্যবহার করে একটি পয়েন্টারকে একটি ঠিকানা অ্যাসাইন করা যায়।

  • ভ্যালু ফাইন্ডিং - এটি হল ডিরেফারেন্সিং, যেখানে * অপারেটর পয়েন্ট করা লোকেশনে সংরক্ষিত মান দেয়।

  • পয়েন্টার অ্যাড্রেস নেওয়া - অন্য ভেরিয়েবলের মতো, পয়েন্টার ভেরিয়েবলগুলোরও একটি অ্যাড্রেস এবং একটি মান থাকে, অ্যাড্রেস অপারেটর দিয়ে পয়েন্টারটি কোথায় সংরক্ষিত সেটি বের করা যায়।

  • পয়েন্টারের সাথে ইন্টিজার যোগ করা - + অপারেটর ব্যবহার করে একটি পয়েন্টারের সাথে একটি ইন্টিজার বা একটি ইন্টিজারের সাথে একটি পয়েন্টার যোগ করা যায়। উভয় ক্ষেত্রে ইন্টিজারটি পয়েন্ট করা টাইপের বাইট সংখ্যা দিয়ে গুণ করা হয় এবং ফলাফলটি আসল অ্যাড্রেসে যোগ হয়।

  • পয়েন্টার ইনক্রিমেন্ট করা - এটি একটি অ্যারে এলিমেন্ট যা অ্যারেতে পরবর্তী এলিমেন্টে সরানোর জন্য বাধ্য করে।

  • পয়েন্টার থেকে ইন্টিজার বিয়োগ করা - - (মাইনাস) অপারেটর ব্যবহার করে একটি পয়েন্টার থেকে একটি ইন্টিজার বিয়োগ করা যায়। ইন্টিজারটি পয়েন্ট করা টাইপের বাইট সংখ্যা দিয়ে গুণ করা হয় এবং ফলাফলটি আসল অ্যাড্রেস থেকে বিয়োগ করা হয়।

  • পয়েন্টার ডিক্রিমেন্ট করা - ডিক্রিমেন্ট করা পয়েন্টার, আগের লোকেশনে পয়েন্ট করে। আমরা ডিক্রিমেন্ট অপারেটরের প্রি এবং পোস্টফিক্স উভয় ফর্ম ব্যবহার করতে পারি।

  • সাবট্র্যাকশন - দুটি পয়েন্টারের পার্থক্য বের করা যায়। সাধারণত এলিমেন্টগুলো কতটা আলাদা সেটি বের করতে ব্যবহৃত হয়।

  • কমপ্যারিজন - রিলেশনাল অপারেটর ব্যবহার করে দুটি পয়েন্টারের মান কমপেয়ার করা যায়।

উদাহরণ

C ভাষায় পয়েন্টার অপারেশনের ফাংশনিং ডেমনস্ট্রেট করার প্রোগ্রাম নিচে দেওয়া হল:

#include  main(){    int x, y;    // একটি পয়েন্টার ডিক্লেয়ার করা    int *p;    clrscr();    x = 10;    // একটি পয়েন্টারে ভ্যালু অ্যাসাইন করা    p = &x;    y = *p;    printf("x এর মান = %d", x);    printf("x সংরক্ষিত আছে অ্যাড্রেস %u", &x);    printf("পয়েন্টার ব্যবহার করে x এর মান = %d", *p);    printf("পয়েন্টার ব্যবহার করে x এর অ্যাড্রেস = %u", p);    printf("y-এ x এর মান = %d", y);    *p = 25;    printf("এখন x = %d", x);    getch(); }

আউটপুট

উপরের প্রোগ্রামটি এক্সিকিউট করলে নিচের আউটপুট পাওয়া যাবে:

x এর মান = 10 x সংরক্ষিত আছে অ্যাড্রেস = 5000 পয়েন্টার ব্যবহার করে x এর মান = 10 পয়েন্টার ব্যবহার করে x এর অ্যাড্রেস = 5000 y-এ x এর মান = 10 এখন x = 25
  1. সি ভাষায় শিফট অপারেশন (লেফট, রাইট শিফট এবং কমপ্লিমেন্ট)

  2. সি ভাষায় লুপ কন্ট্রোল স্টেটমেন্ট (for, while, do-while) ফ্লোचार্ট ও প্রোগ্রামসহ ব্যাখ্যা

  3. সি ভাষায় বিভিন্ন সার্চিং টেকনিক কী কী?

  4. সি ভাষায় ইমপ্লিসিট ও এক্সপ্লিসিট টাইপ কনভার্সন