اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

تابعی برای یافتن اندازه‌ی آرایه

+1 امتیاز
287 نمایش

تابع زیر اندازه‌ی یک آرایه رو برمی‌گردونه. کسی می‌تونه دقیق توضیح بده که این چیه؟ یه کم عجیبه.

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}

مخصوصاً اون n!!!

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده جمعه ۹ فروردین ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز
 
بهترین پاسخ

اول چند نکته رو در نظر می‌گیریم

نکته ۱: نوع یک آرایه، ارجاعی از ۱) یک نوع داده‌ی خاص به ۲) خانه‌ی اول به همراه ۳)‌ تعداد خانه‌های مورد ارجاع است. برای مثال آرایه‌ی زیر رو ببینید

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 رو برگردونه. که درسته.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده سه شنبه ۱۴ خرداد ۱۳۹۲ توسط prodo  
انتخاب شده چهارشنبه ۵ تیر ۱۳۹۲ توسط prodo