মূল কনটেন্টে যান

খুঁজুন

  • সরকারি চাকরির তালিকা
  • সহজে শেখার শর্টকাট ও ফ্ল্যাশ কার্ড
  • MCQ অনুশীলন
  • মক টেস্ট
  • সব বিষয়
  • আমার ড্যাশবোর্ড
  • স্টাডি প্ল্যান
  • ভুল প্রশ্ন
  • অফলাইন লাইব্রেরি

Pointers, Arrays & Strings

পয়েন্টার, অ্যারে ও স্ট্রিং

C Pointer, Array ও Output Tracing কৌশল

পড়তে প্রায় ১২ মিনিট

এই পাঠ শেষে আপনি পারবেন

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

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

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

  • int *p = arr; হলে p + 1 মেমোরিতে sizeof(int) বাইট (সাধারণত 4 bytes) সামনে এগোয়।
  • *p++ মানে আগে বর্তমান *p ব্যবহার হবে, তারপর পয়েন্টার p এক ঘর বাড়বে।
  • (*p)++ মানে p যে ভ্যারিয়েবলকে নির্দেশ করছে তার মান ১ বাড়বে।
#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-এর মান পরিবর্তন করে না।
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 লোকাল ভ্যারিয়েবল কেবল একবার ইনিশিয়ালাইজ হয় এবং ফাংশন কল শেষ হলেও মেমোরিতে তার সর্বশেষ মান ধরে রাখে।

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 করে, তাই ফাংশনের ভেতরে অ্যারের উপাদান বদলালে মূল অ্যারেও বদলে যায়।

সংস্করণ ১ · সর্বশেষ হালনাগাদ ২১ অক্টোবর, ২০২৬