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

C-তে const char* p, char* const p, এবং const char* const p এর পার্থক্য

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

C প্রোগ্রামিং ল্যাঙ্গুয়েজে, *p পয়েন্টারে সংরক্ষিত মানকে প্রতীকী করে এবং p মানটির অ্যাড্রেসকে, যাকে পয়েন্টার বলা হয়।

const char* এবং char const* বোঝায় যে পয়েন্টারটি একটি কনস্ট্যান্ট char-কে পয়েন্ট করতে পারে এবং এই পয়েন্টার দ্বারা পয়েন্ট করা char-এর মান পরিবর্তন করা যাবে না। কিন্তু পয়েন্টারের মান পরিবর্তন করা যাবে কারণ এটি কনস্ট্যান্ট নয় এবং এটি অন্য একটি কনস্ট্যান্ট char-কে পয়েন্ট করতে পারে।

char* const বোঝায় যে পয়েন্টারটি একটি char-কে পয়েন্ট করতে পারে এবং এই পয়েন্টার দ্বারা পয়েন্ট করা char-এর মান পরিবর্তন করা যাবে। কিন্তু পয়েন্টারের মান পরিবর্তন করা যাবে না কারণ এখন এটি কনস্ট্যান্ট এবং এটি অন্য কোনো char-কে পয়েন্ট করতে পারবে না।

const char* const বোঝায় যে পয়েন্টারটি একটি কনস্ট্যান্ট char-কে পয়েন্ট করতে পারে এবং এই পয়েন্টার দ্বারা পয়েন্ট করা int-এর মান পরিবর্তন করা যাবে না। এবং পয়েন্টারের মানও পরিবর্তন করা যাবে না কারণ এখন এটি কনস্ট্যান্ট এবং এটি অন্য কোনো কনস্ট্যান্ট char-কে পয়েন্ট করতে পারবে না।

থাম্ব রুল (Thumb Rule): নেমিং সিনট্যাক্স ডান থেকে বাম পড়তে হয়।

// কনস্ট্যান্ট পয়েন্টার টু কনস্ট্যান্ট char
const char * const

// কনস্ট্যান্ট পয়েন্টার টু char
char * const

// পয়েন্টার টু কনস্ট্যান্ট char
const char *

উদাহরণ (C প্রোগ্রাম)

কমেন্ট করা এররনাস কোডগুলো আনকমেন্ট করুন এবং এরর দেখুন।

#include <stdio.h>

int main() {
    // Example: char const*
    // Note: char const* is same as const char*
    const char p = 'A';
    // q is a pointer to const char
    char const* q = &p;

    // Invalid assignment
    // value of p cannot be changed
    // error: assignment of read-only location '*q'
    // *q = 'B';

    const char r = 'C';
    // q can point to another const char
    q = &r;
    printf("%c\n", *q);

    // Example: char* const
    char u = 'D';
    char * const t = &u;
    // You can change the value
    *t = 'E';
    printf("%c", *t);

    // Invalid assignment
    // t cannot be changed
    // error: assignment of read-only variable 't'
    // t = &r;

    // Example: char const* const
    char const* const s = &p;
    // Invalid assignment
    // value of s cannot be changed
    // error: assignment of read-only location '*s'
    // *s = 'D';

    // Invalid assignment
    // s cannot be changed
    // error: assignment of read-only variable 's'
    // s = &r;

    return 0;
}

আউটপুট

C E

ব্যাখ্যা: প্রথমে q 'A'-কে পয়েন্ট করে, পরে 'C'-কে পয়েন্ট করানো হয় (পয়েন্টার পরিবর্তন করা যায়, কিন্তু ভ্যালু নয়)। t 'D'-কে পয়েন্ট করে এবং এর ভ্যালু 'E' করা যায় (ভ্যালু পরিবর্তন করা যায়, কিন্তু পয়েন্টার নয়)। s পূরণ কনস্ট্যান্ট, না পয়েন্টার না ভ্যালু পরিবর্তন করা যায়।

  1. C#-তে readonly এবং const কীওয়ার্ডের পার্থক্য

  2. C# এবং Visual C#-র পার্থক্য

  3. C# এবং .NET-এর পার্থক্য

  4. Go এবং Java-এর পার্থক্য