এই হ্যাকটি বুঝতে, প্রথমে আপনাকে পয়েন্টার পার্থক্যটি বুঝতে হবে, অর্থাত্, যখন একই অ্যারের উপাদানগুলিতে নির্দেশিত দুটি পয়েন্টারগুলি বিয়োগ করা হয় তখন কী ঘটে ?
যখন একটি পয়েন্টার অন্য থেকে বিয়োগ করা হয়, ফলাফলটি পয়েন্টারগুলির মধ্যে দূরত্ব (অ্যারে উপাদানগুলিতে পরিমাপ করা হয়)। সুতরাং, যদি pপয়েন্ট করে a[i]এবং qনির্দেশ করে a[j]তবে p - qসমান equali - j ।
সি 11: 6.5.6 অ্যাডিটিভ অপারেটর (p9):
যখন দুটি পয়েন্টার বিয়োগ করা হয় , উভয়ই একই অ্যারে অবজেক্টের উপাদানগুলিকে নির্দেশ করবে বা অ্যারে অবজেক্টের শেষ উপাদানটির একটিতে; ফলাফলটি দুটি অ্যারের উপাদানগুলির সাবস্ক্রিপ্টগুলির পার্থক্য । [...]।
অন্য কথায়, যদি ক্রমান্বয়ে অভিব্যক্তি Pএবং Qনির্দেশিত হয়, যথাক্রমে, একটি অ্যারে অবজেক্টের iচতুর্থ ও- jতম উপাদানগুলি, এক্সপ্রেশনটির (P)-(Q)মানi−j প্রদান করে মানটি টাইপের কোনও বস্তুর সাথে মানিয়ে যায় ptrdiff_t।
এখন আমি প্রত্যাশা করছি যে আপনি পয়েন্টারে অ্যারে নাম রূপান্তর সম্পর্কে অবগত আছেন, a পয়েন্টারে অ্যারের প্রথম উপাদানকে রূপান্তর করেন a। &aপুরো মেমরি ব্লকের ঠিকানা, অর্থাত্ এটি অ্যারের ঠিকানা a। নীচের চিত্রটি আপনাকে বুঝতে সহায়তা করবে ( বিস্তারিত ব্যাখ্যাের জন্য এই উত্তরটি পড়ুন ):

এটি আপনাকে বুঝতে সহায়তা করবে যে কেন aএবং &aএকই ঠিকানা রয়েছে এবং (&a)[i]আমি কী অ্যারের ঠিকানা ( যেটির আকারের একই আকার a)।
সুতরাং, বিবৃতি
return (&a)[n] - a;
সমতুল্য
return (&a)[n] - (&a)[0];
এবং এই পার্থক্য পয়েন্টার মধ্যে উপাদানের সংখ্যা দেব (&a)[n]এবং (&a)[0], যা হয় nঅ্যারে প্রতিটিn int উপাদানকে করে। সুতরাং, মোট অ্যারে উপাদানগুলি n*n= n2 ।
বিঃদ্রঃ:
সি 11: 6.5.6 অ্যাডিটিভ অপারেটর (p9):
যখন দুটি পয়েন্টার বিয়োগ করা হয়, উভয়ই একই অ্যারে অবজেক্টের উপাদানগুলিকে নির্দেশ করবে বা অ্যারে অবজেক্টের শেষ উপাদানটির একটিতে ; ফলাফলটি দুটি অ্যারের উপাদানগুলির সাবস্ক্রিপ্টগুলির পার্থক্য। ফলাফলের আকারটি বাস্তবায়ন-সংজ্ঞায়িত হয় এবং এর প্রকার (স্বাক্ষরিত পূর্ণসংখ্যার প্রকার) শিরোনামে ptrdiff_tসংজ্ঞায়িত করা হয় <stddef.h>। ফলাফল যদি সেই ধরণের কোনও বস্তুর মধ্যে উপস্থাপনযোগ্য না হয়, তবে আচরণটি সংজ্ঞায়িত।
যেহেতু (&a)[n]একই অ্যারে অবজেক্টের উপাদানগুলির দিকে ইঙ্গিত করে না বা অ্যারে অবজেক্টের শেষ উপাদানটির একটিও অতীত হয় না, তাই অপরিজ্ঞাত আচরণের জন্য(&a)[n] - a প্রার্থনা করবে ।
এছাড়াও মনে রাখবেন, ভাল ফাংশনের রিটার্ন টাইপ পরিবর্তন করতে pকরতে ptrdiff_t।