মূল কনটেন্টে যান
অনুশীলন (১২)
Programming FundamentalsPointers, Arrays & Strings

C Pointer, Array ও Output Tracing কৌশল

পড়তে প্রায় ১২ মিনিটসংস্করণ ১সর্বশেষ আপডেট: ২১ অক্টোবর, ২০২৬১২টি অনুশীলন প্রশ্ন

সংক্ষেপে মনে রাখুন

দ্রুত রিভিশনের জন্য মূল কথা

মূল কথা
  • Pointer arithmetic ও array indexing-এর সম্পর্ক বোঝা
  • Pre-increment (++x), Post-increment (x++) ও short-circuit evaluation ট্রেস করা
  • static ভ্যারিয়েবল ও call-by-reference ফাংশনের আউটপুট নির্ণয় করা
সূত্র ও নিয়ম
a[i] == *(a + i) == *(i + a) == i[a]

C/C++ এ অ্যারের সাবস্ক্রিপ্ট ব্র্যাকেট [] মূলত পয়েন্টার অ্যারিথমেটিকের সিনট্যাকটিক সুগার। কম্পাইলার a[i] কে অ…

যেখানে ভুল হয়

পরীক্ষার্থীরা 3[arr] বা 2["Bangladesh"] কোড দেখে অপশনে "Compilation Error" বা "Syntax Error" দাগায়। প্রকৃতপক্ষে এটি সম্পূর্ণ বৈধ সি সিনট্যাক্স।

Pointer ও Array-এর সম্পর্ক

C ভাষায় একটি অ্যারের নাম তার প্রথম উপাদানের base address নির্দেশ করে। অর্থাৎ arr[i] এবং *(arr + i) সম্পূর্ণ সমতুল্য।

  • int *p = arr; হলে p + 1 মেমোরিতে sizeof(int) বাইট (সাধারণত 4 bytes) সামনে এগোয়।
  • *p++ মানে আগে বর্তমান *p ব্যবহার হবে, তারপর পয়েন্টার p এক ঘর বাড়বে।
  • (*p)++ মানে p যে ভ্যারিয়েবলকে নির্দেশ করছে তার মান ১ বাড়বে।
c
#include <stdio.h>
int main(void) {
    int a[] = {10, 20, 30, 40};
    int *p = a;
    printf("%d ", *p++);   // 10 প্রিন্ট করে p যাবে a[1]-এ
    printf("%d ", *++p);   // p আগে a[2]-এ যাবে, প্রিন্ট করবে 30
    printf("%d\n", (*p)++); // 30 প্রিন্ট করে a[2]-এর মান 31 করবে
    return 0;
}

Short-Circuit Evaluation ও Operator ফাঁদ

সরকারি চাকরির MCQ ও লিখিত পরীক্ষায় && এবং || অপারেটরের short-circuit আচরণ থেকে প্রায়ই প্রশ্ন আসে:

  • A && B: যদি A মিথ্যা (0) হয়, তবে B কখনোই এক্সিকিউট হবে না।
  • A || B: যদি A সত্য (non-zero) হয়, তবে B এক্সিকিউট হবে না।
  • sizeof() একটি compile-time অপারেটর; এর ভেতরের এক্সপ্রেশন (যেমন sizeof(i++)) রানটাইমে i-এর মান পরিবর্তন করে না।
c
int x = 0, y = 5;
if (x && ++y) {
    // x == 0 হওয়ায় ++y চলবেই না
}
printf("x = %d, y = %d\n", x, y); // Output: x = 0, y = 5

Static ভ্যারিয়েবল ও Recursion Tracing

static লোকাল ভ্যারিয়েবল কেবল একবার ইনিশিয়ালাইজ হয় এবং ফাংশন কল শেষ হলেও মেমোরিতে তার সর্বশেষ মান ধরে রাখে।

c
int counter(void) {
    static int c = 0;
    return ++c;
}
// পরপর ৩ বার counter() কল করলে যথাক্রমে 1, 2, 3 রিটার্ন করবে।

পরীক্ষার শর্টকাট টিপস

  • char s[] = "BD"; হলে sizeof(s) হবে 3 (নাল ক্যারেক্টার '\0' সহ), কিন্তু strlen(s) হবে 2।
  • ফাংশনে অ্যারে পাঠালে সেটি pointer হিসেবে decay করে, তাই ফাংশনের ভেতরে অ্যারের উপাদান বদলালে মূল অ্যারেও বদলে যায়।

পরের ধাপ

এই টপিকে ৫টি প্রশ্ন অনুশীলন করুন

পড়া মনে আছে কি না, ছোট একটি সেটে দেখে নিন। প্রতিটি উত্তরের সাথে ব্যাখ্যা থাকবে, আর ভুল প্রশ্নগুলো রিভিশনের তালিকায় যাবে