cpp-05-04 - اندازه یا طول آرایه چیه؟ دستور sizeof
cpp-05-04 - اندازه یا طول آرایه چیه؟ دستور sizeof
توضیحات :
وقتی دربارهٔ سایز آرایه صحبت میکنیم، منظور ما تعداد خانههای آرایه است. در برخی زبانها به آن length گفته میشود.
مثلاً اگر بنویسیم:
این یعنی آرایهٔ a دقیقاً ۱۰ خانه دارد. که میگوییم:
سایز آرایه = ۱۰
یا
طول آرایه = ۱۰
در برنامههای کوچک، سایز آرایه جلوی چشممان است. اما وقتی کد بزرگ شود—مثلاً چند هزار خطی شود—پیدا کردن سایز آرایه راحت نیست.
یا حتی ممکن است این آرایه را در یک جای دیگر از برنامه ساخته باشند و تو فقط داری از آن استفاده میکنی.
بنابراین باید بتوانیم سایز آرایه را از داخل کد محاسبه کنیم.
🔵 چرا در زبانهای دیگر این راحت است؟
در زبانهایی مثل JavaScript، Python، Java و C#، هر آرایه یک آبجکت (Object) است.
چون آبجکت است، متد دارد:
ولی در ++C، آرایهها آبجکت نیستند.
پس چیزی مثل:
اصلاً وجود ندارد.
🔵 پس چطور در ++C سایز آرایه را به دست بیاوریم؟
از تابع معروف sizeof استفاده میکنیم.
sizeof به ما میگوید:
-
اندازهٔ یک متغیر چند بایت است
-
اندازهٔ یک آرایه چند بایت است
-
اندازهٔ یک نوع داده چند بایت است
🔵 مرحلهٔ اول: مقدار sizeof روی آرایه
اگر بنویسی:
و آرایه باشد:
خروجی میشود:
چرا؟
چون:
-
آرایه ۲ تا خانه دارد
-
هر خانه یک
intاست -
هر
intمعمولاً ۴ بایت است
پس:
۲ × ۴ = ۸ بایت
بنابراین sizeof(a) همیشه مقدار کل تعداد بایتهای آرایه را برمیگرداند، نه تعداد خانهها را.
🔵 مرحلهٔ دوم: تقسیم کردن حجم کل آرایه بر حجم هر خانه
اگر بخواهیم تعداد خانهها را بفهمیم:
این دقیقاً سایز واقعی آرایه را میدهد.
مثال:
خروجی:
🔵 تبدیل این عملیات به یک متغیر
میتونیم سایز آرایه رو داخل یک متغیر ذخیره کنیم:
حالا هر وقت بخواهیم از سایز آرایه استفاده کنیم، کافی است از size استفاده کنیم.
🔵 استفاده از سایز آرایه در حلقه حلقهٔ for
حالا که سایز را داریم، حلقهٔ ما دقیق و بدون خطاست:
این کاملاً امن است، چون حلقه درست به اندازهٔ آرایه تکرار میشود.
🔵 نکتهٔ مهم: این روش سنتی است
این روش روش سنتی و الگوریتمیک است.
در ++C مدرن هدرفایلها و ساختارهای بسیار قویتری داریم مثل:
-
std::array -
std::vector -
std::string -
std::list -
و ...
که کار با آرایهها را راحتتر و ایمنتر میکنند.
ولی قبل از رسیدن به آنها، لازم است که ماهیت آرایهها و پشتصحنهٔ کار sizeof را درک کنیم.
چون اگر این مفاهیم را نفهمیم، درک ساختارهای پیشرفته سخت میشود.
🔵 جمعبندی
-
آرایه در ++C آبجکت نیست و متد length ندارد.
-
sizeof(array)حجم کل آرایه به بایت را برمیگرداند. -
sizeof(type)حجم یک خانه را برمیگرداند. -
با تقسیم این دو مقدار، طول واقعی آرایه را پیدا میکنیم.
-
این روش سنتی است ولی برای فهم الگوریتم و کار با حافظه ضروری است.
-
بعداً میرویم سراغ کالکشنها که همهچیز را راحتتر میکنند.
لطفا برای گذاشتن نظرات خود وارد شوید