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 = 5Static ভ্যারিয়েবল ও 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 করে, তাই ফাংশনের ভেতরে অ্যারের উপাদান বদলালে মূল অ্যারেও বদলে যায়।
পরের ধাপ
এই টপিকে ৫টি প্রশ্ন অনুশীলন করুন
পড়া মনে আছে কি না, ছোট একটি সেটে দেখে নিন। প্রতিটি উত্তরের সাথে ব্যাখ্যা থাকবে, আর ভুল প্রশ্নগুলো রিভিশনের তালিকায় যাবে