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

C/C++-এ ড্যাংলিং, ভয়েড, নাল এবং ওয়াইল্ড পয়েন্টার

ড্যাংলিং পয়েন্টার

ড্যাংলিং পয়েন্টার হলো এমন পয়েন্টার যা ইতিমধ্যে ফ্রি বা ডিলিট করা মেমরি লোকেশনকে পয়েন্ট করে। পয়েন্টার ড্যাংলিং হতে পারে নিম্নোক্ত উপায়ে:

ফাংশন কল

লোকাল ভেরিয়েবলে পয়েন্ট করার পয়েন্টার ড্যাংলিং হয়ে যায় যদি লোকাল ভেরিয়েবল static না হয়।

int* show(void) {
    int n = 76;
    return &n;
}

আউটপুট

গারবেজ ঠিকানা আউটপুট হবে।

মেমরি ডি-অ্যালোকেশন

#include <stdlib.h>
#include <stdio.h>

int main() {
    float* p = (float*)malloc(sizeof(float));
    free(p);  // free() কল করার পর p ড্যাংলিং পয়েন্টার
    p = NULL; // এখন p ড্যাংলিং নয়
}

ভেরিয়েবল স্কোপ থেকে বাইরে যাওয়া

int main() {
    int* p;
    {
        int c;
        p = &c;
    }
    // এখানে p ড্যাংলিং পয়েন্টার
}

ভয়েড পয়েন্টার

C-এ ভয়েড পয়েন্টার যেকোনো ডেটা টাইপের সাথে জড়িত নয়। এটি স্টোরেজে ডেটা লোকেশনের ঠিকানা নির্দেশ করে। এটাকে জেনারেল পারপাস পয়েন্টারও বলা হয়।

সীমাবদ্ধতা:

  • কনক্রিট সাইজ না থাকায় পয়েন্টার আритমেটিক সম্ভব নয়।
  • এটি ডিরেফারেন্স করা যায় না।

সহজ উদাহরণ

#include <stdlib.h>

int main() {
    int a = 7;
    float b = 7.6;
    void* p;
    p = &a;
    printf("Integer variable is = %d", *((int*)p));
    p = &b;
    printf("\nFloat variable is = %f", *((float*)p));
    return 0;
}

আউটপুট

Integer variable is = 7
Float variable is = 7.600000

অ্যালগরিদম

Begin
    ইন্টিজার a এবং ফ্লোট b ইনিশিয়ালাইজ করুন।
    ভয়েড পয়েন্টার p ঘোষণা করুন।
    (int*)p = ভয়েডের টাইপ কাস্টিং।
    p = &b মানে p এখন ফ্লোট।
    (float*)p = ভয়েডের টাইপ কাস্টিং।
    মান প্রিন্ট করুন।
End.

নাল পয়েন্টার

নাল পয়েন্টার কোনো কিছুই পয়েন্ট করে না। ব্যবহার:

  • পয়েন্টার ভেরিয়েবল ইনিশিয়ালাইজ করার সময়যখন এখনো কোনো বৈধ ঠিকানা নেই।
  • ফাংশন আর্গুমেন্টে নাল পয়েন্টার পাস করুন যখন কোনো বৈধ ঠিকানা পাস করতে চান না।
  • পয়েন্টার অ্যাক্সেস করার আগে নাল চেক করুন তাতে ডিরেফারেন্স করার সময় এরর হ্যান্ডলিং করা যায়।

উদাহরণ

#include <iostream>
#include <stdio.h>

int main() {
    int* p = NULL;
    printf("The value of pointer is %u", p);
    return 0;
}

আউটপুট

The value of pointer is 0.

ওয়াইল্ড পয়েন্টার

ওয়াইল্ড পয়েন্টার যেকোনো আর্বিট্রারি মেমরি লোকেশনে পয়েন্ট করে (নালও নয়)।

int main() {
    int* ptr; // ওয়াইল্ড পয়েন্টার
    *ptr = 5; // অনির্দিষ্ট আচরণ
}
  1. C/C++-এ লেফট শিফট এবং রাইট শিফট অপারেটর

  2. C/C++-এ malloc() এবং free() কীভাবে কাজ করে?

  3. C/C++-এ isalpha() এবং isdigit() ফাংশন

  4. C/C++ পয়েন্টার (Pointer) vs জাভা রেফারেন্স (Reference) - পার্থক্য