بله پاسخ جناب abbasalim تا حدود زیادی درست بود
قضیه از این قراره که نام آرایه اشاره گری به اولین عنصر آرایه هست. ما میتونیم به بقیه اعضای آرایه به دو صورت دسترسی داشته باشیم:
array[n]
*(array+n)
از اونجا که 2+5 با 5+2 برابر هست، میتونیم این شکلی هم عمل کنیم:
*(n+array)
هر وقت کامپایلر عملگر [n] رو دید، سعی میکنه اندازه نوع داده آرایه رو در n ضرب کنه و با نام آرایه (که اشاره اگری به اولین عنصر هست) جمع کنه. به همین دلیل روش دوم هم کار میکنه:
3[array]
در حقیقت کد بالا از نظر کامپایلر به این صورت هست:
array + (size*n)
در حالی که:
array[n]
از نظر کامپایلر به این صورت هست:
array + (n*size)
(یا برعکس)
نتیجه کلی:
استفاده از اشاره گر برای دسترسی به اعضای آرایه سرعت بیشتری داره، چون کامپایلر برای به دست آوردن اندیس آرایه فقط کافیه یه عمل جمع انجام بده، اما در هنگام استفاده از عملگر [] محبوره علاوه بر عمل جمع، یه عمل ضرب اضافه هم انجام بده