C-তে অ্যারে (Array) একই টাইপের এলিমেন্টগুলো সংরক্ষণের জন্য ব্যবহৃত হয়, আর পয়েন্টার (Pointers) হলো অ্যাড্রেস ভেরিয়েবল যা কোনো ভেরিয়েবলের অ্যাড্রেস সংরক্ষণ করে। অ্যারে ভেরিয়েবলও একটি অ্যাড্রেস রাখে যাকে একটি পয়েন্টার দিয়ে পয়েন্ট করা যায় এবং পয়েন্টার দিয়ে অ্যারে নেভিগেট করা যায়। অ্যারের জন্য পয়েন্টার ব্যবহার করার দুইটি সুবিধা আছে: প্রথম, ডাইনামিক্যালি অ্যালোকেটেড অ্যারের অ্যাড্রেস পয়েন্টারে সংরক্ষণ করা যায়; দ্বিতীয়, অ্যারে কোনো ফাংশনে পাস করার সময় পয়েন্টার ব্যবহার করা হয়। নিচে অ্যারে এবং পয়েন্টার টু অ্যারে ব্যবহারের পার্থক্যগুলো দেওয়া হলো:
sizeof() অপারেটর অ্যারের ক্ষেত্রে অ্যারের সাইজ প্রিন্ট করে এবং পয়েন্টারের ক্ষেত্রে
intএর সাইজ প্রিন্ট করে।অ্যাসাইনমেন্ট (Assignment) অ্যারে ভেরিয়েবলকে অন্য ভেরিয়েবলের অ্যাড্রেস অ্যাসাইন করা যায় না, কিন্তু পয়েন্টার নিতে পারে।
প্রথম ভ্যালু (First Value) প্রথম ইন্ডেক্সড ভ্যালু পয়েন্টারের ভ্যালুর সমান। উদাহরণ:
array[0] == *p।ইটারেশন (Iteration) অ্যারে এলিমেন্টগুলো ইন্ডেক্স
[]দিয়ে নেভিগেট করা যায়, পয়েন্টার পয়েন্টার অ্যারিথমেটিক দিয়ে অ্যারে এলিমেন্টগুলোর এক্সেস দেয়। উদাহরণ:array[2] == *(p+2)।
উদাহরণ (C প্রোগ্রাম)
#include <stdio.h>
void printElement(char* q, int index) {
printf("Element at index(%d) is: %c\n", index, *(q + index));
}
int main() {
char arr[] = {'A', 'B', 'C'};
char* p = arr;
printf("Size of arr[]: %zu\n", sizeof(arr));
printf("Size of p: %zu\n", sizeof(p));
printf("First element using arr is: %c\n", arr[0]);
printf("First element using p is: %c\n", *p);
printf("Second element using arr is: %c\n", arr[1]);
printf("Second element using p is: %c\n", *(p + 1));
printElement(p, 2);
return 0;
}
আউটপুট
Size of arr[]: 3 Size of p: 8 First element using arr is: A First element using p is: A Second element using arr is: B Second element using p is: B Element at index(2) is: C
ব্যাখ্যা: ৬৪-বিট সিস্টেমে পয়েন্টার সাইজ ৮ বাইট। sizeof(arr) পুরো অ্যারের সাইজ (৩ বাইট) দেয়, কিন্তু sizeof(p) পয়েন্টার ভেরিয়েবলের সাইজ (৮ বাইট) দেয়। অ্যারে নামকে পয়েন্টার হিসেবে ব্যবহার করা যায় কিন্তু এটি একটি কনস্ট্যান্ট পয়েন্টার, এর মান পরিবর্তন করা যায় না।