পয়েন্টার (*Pointer) – ১

আমরা যদি একটি যে কোন টাইপের variable ডিক্লেয়ার করি যেমনঃ int abc, এইটার মানে কি??

int abc ডিক্লেয়ার করলে কম্পাইলার প্রোগ্রাম টি চলার সময়ে মেমরিতে abc নামে ২ বাইট জায়গা রাখবে।  আর যেখানে জায়গাটি রাখা হয়েছে ওইটা পরবর্তীতে Access করার জন্য অবশ্যই address থাকবে। এখন printf(“%d”, &abc); statement এর মাধ্যমে মেমরিতে abc রাখার জন্য যে জায়গা রাখা হয়েছে মানে address of abc প্রিন্ট করবে। এভাবে একটি ভেরিয়েবলের address জানা যাবে।

পয়েন্টার কি?

Pointer *পয়েন্টার হল এক ধরনের ভেরিয়েবল। লো লেভেল ল্যাংগুয়েজ গুলোতে ডাটা নিয়ে কাজ করার জন্য সরাসরি মেমরি Address ব্যবহার করা হয় কিন্তু হাই লেভেল ল্যাংগুয়েজ এ সরাসরি ব্যবহার না করে ভেরিয়েবল ব্যবহার করা হয়। প্রোগ্রাম চলাকালীন সময়ে ভেরিয়েবল কে ঠিক ই মেমরি Address ব্যবহার করে ডাটা রাখা হয়। প্রোগ্রামে ব্যবহৃত প্রতিটি ভেরিয়েবলেরই একটা মেমরি Address থাকে আগেই বলা হয়েছ। মূল কথা হল, *Pointer হল এক বিশেষ ধরনের ভেরিয়েবল, যা অন্য কোন ভেরিয়েবল এর Address রাখবে।

পয়েন্টার কেন প্রয়োজন?

পয়েন্টার কোন প্রোগ্রামের execution speed  বাড়ায়।

তারপর Array ডিক্লেয়ার করলেন, elements ও রাখলেন তখন Array এর element গুলা access করবেন কিভাবে?

String এর বেলাতেও তাই!!

আরো অনেক আছে চিন্তা করেন।

Pointer কিভাবে Declare করবেন?

একেবারে সোজা!! data_type *pointer_variable_name; যেমনঃ int *abc; আবার মনে করার কারন নেই যে pointer variable এর কোন address নাই, pointer variable এর ও মেমোরি address থাকে।


#include <bits/stdc++.h>
using namespace std;
int main()
{
int a = 5; //Variable নিলাম value assign করলাম
int *aPointer; //একটা Pointer variable নিলাম
aPointer = &a; //a এর address রাখলাম মানে aPointer, a এর address কে পয়েন্ট করছে
printf("%d\n", aPointer);
printf("%d\n", &a); //আউটপুট এ aPointer এর value আর &a মেমরি address একই দেখা যাবে

}

আরেকটা important বিষয় Pointer variable এর ডিক্লেয়ার করা ডাটা টাইপ এবং যে variable এর address Pointer
variable এ রাখা হবে সেই variable  এর ডাটা টাইপ অবশ্যই এক (same) হতে হবে।

আরেকটা প্রোগ্রাম দেখি

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    int *pointer;
    int numbers[6] = {0,1,1,2,3,5}; // মেমরিতে  sequentially element গুলা রাখলাম array দিয়ে
    pointer = numbers; //কোন array এর নামটাই  তার প্রথম element এর address মানে numbers এর প্রথম element এর address টা
                        //pointer variable পয়েন্ট করছে
    printf("%d %d\n", *pointer, pointer); //numbers array এর প্রথম উপাদান (value)প্রিন্ট করবে (*pointer)। আর pointer address টাকে।
    for(a = 0; a<6; a++){
        printf("%d ", *pointer);
        pointer++; //pointer variable এর মান increment করলাম
    }
    //ফলাফল
    //0 6422288 (address) এর মান আপনাদের ভিন্ন আসতে পারে
    //0 1 1 2 3 5
}

বাকি পর্ব পড়ার আগে চিন্তা/নিজে করে দেখতে থাকেন!!!😀
Resources: সবার জন্য C(বই), stack-overflow, আমার মাথা 😛 যদিও নাই কিছু

ভুল হলে জানাবেন।😀

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *