কিছু সি সাক্ষাত্কারের প্রশ্নগুলির মধ্য দিয়ে আমি নীচের সমাধান সহ একটি প্রশ্ন পেয়েছি যাতে "সাইজেরফ অপারেটরটি ব্যবহার না করে সিটিতে কোনও অ্যারের আকার কীভাবে পাওয়া যায়?" এটি কাজ করে, তবে কেন বুঝতে পারছি না।
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
প্রত্যাশিত হিসাবে, এটি 5 ফিরে আসে।
সম্পাদনা করুন: লোকেরা এই উত্তরটি দেখিয়েছে , তবে বাক্য গঠনটি কিছুটা পৃথক হয়, অর্থাত্ সূচক পদ্ধতিতে
size = (&arr)[1] - arr;
সুতরাং আমি বিশ্বাস করি যে উভয় প্রশ্নই বৈধ এবং সমস্যাটির দিকে কিছুটা আলাদা পদ্ধতি রয়েছে। অপরিসীম সাহায্য এবং পুরো ব্যাখ্যা জন্য আপনাকে ধন্যবাদ!
*((*(&array + 1)) - 1)
একটি স্বয়ংক্রিয় অ্যারের শেষ উপাদান পেতে ব্যবহার করা নিরাপদ? । tl; ডাঃ *(&a + 1)
অনির্ধারিত বেহভৈরকে আহ্বান জানিয়েছে
(ptr)[x]
হিসাবে একই *((ptr) + x)
।
&a + 1
কোনও বৈধ অবজেক্টের দিকে নির্দেশ করা হচ্ছে না, সুতরাং এটি অবৈধ।