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 = 5Static ভ্যারিয়েবল ও 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 করে, তাই ফাংশনের ভেতরে অ্যারের উপাদান বদলালে মূল অ্যারেও বদলে যায়।
সংস্করণ ১ · সর্বশেষ হালনাগাদ ২১ অক্টোবর, ২০২৬