اول چند نکته رو در نظر میگیریم
نکته ۱: نوع یک آرایه، ارجاعی از ۱) یک نوع دادهی خاص به ۲) خانهی اول به همراه ۳) تعداد خانههای مورد ارجاع است. برای مثال آرایهی زیر رو ببینید
int x[] = {'a', 'b', 'c'};
نوع x چیست؟ ارجاعی از نوع کاراکتر به خانهی &x[0]
با تعداد 3
عضو.
اگه بخوایم به زبان C++
این مطلب رو بیان کنیم نوع x
مساوی char(&)[3]
هست. char
برای نوعدادهی مورد استفاده در آرایه، &
برای ارجاع و 3
برای تعدا خانههای مورد استفاده.
نکته ۲: تعداد اعضای مورد استفاده (تعداد خانهها) با int
شمرده نمیشه. بلکه با یه نوع دادهی خاص شمرده میشه به نام size_t
. برای توضیح بیشتر این سوال و ببینید:
تعریف size_t
یعنی یک آرایه یک نوع به شکل type(&)[size_t]
هست. بنابراین با داشتن یه آرایه از یک نوع خاص باید بتونیم اندازهش رو داشته باشیم. یعنی همون تابع مورد سوال
<typename T, size_t n>
size_t array_size(const T (&)[n])
{
return n;
}
که میگه برای یه آرایه از نوع T
و اندازهی n
، همون n
رو برگردونه. که درسته.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)