نشانگر در مقابل آرایه
یک اشاره گر یک نوع داده است که یک مرجع به یک مکان حافظه نگه می دارد (یعنی یک متغیر اشاره گر آدرس یک مکان حافظه را ذخیره می کند که در آن برخی از داده ها ذخیره شده است). آرایه ها رایج ترین ساختار داده ای هستند که برای ذخیره مجموعه ای از عناصر استفاده می شود. اکثر زبانهای برنامهنویسی روشهایی را برای اعلام آسان آرایهها و دسترسی به عناصر موجود در آرایهها ارائه میکنند.
اشاره گر چیست؟
یک اشاره گر یک نوع داده است که آدرس یک مکان حافظه را ذخیره می کند که برخی از داده ها در آن ذخیره شده است. به عبارت دیگر، یک اشاره گر به یک مکان حافظه اشاره دارد. دسترسی به داده های ذخیره شده در محل حافظه که توسط اشاره گر به آن ارجاع داده می شود، عدم ارجاع نامیده می شود.هنگام انجام عملیات تکراری مانند پیمایش درختان/رشته ها، جستجوی جدول و غیره، استفاده از اشاره گرها عملکرد را بهبود می بخشد. دلیل آن این است که عدم ارجاع و کپی نشانگرها ارزان تر از کپی کردن واقعی و دسترسی به داده های اشاره شده توسط اشاره گرها است. اشاره گر تهی نشانگری است که به چیزی اشاره نمی کند. در جاوا، دسترسی به یک اشاره گر تهی، استثنایی به نام NullPointerException ایجاد می کند.
آرایه چیست؟
نشان داده شده در شکل 1، یک قطعه کد است که معمولاً برای اعلام و تخصیص مقادیر به یک آرایه استفاده می شود. شکل 2 نشان می دهد که یک آرایه در حافظه چگونه به نظر می رسد.
مقادیر int[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
شکل 1: کد برای اعلام و تخصیص مقادیر به یک آرایه
100 | 101 | 102 | 103 | 104 |
شاخص: 0 | 1 | 2 | 3 | 4 |
شکل 2: آرایه ذخیره شده در حافظه
کد فوق آرایه ای را تعریف می کند که می تواند 5 عدد صحیح را ذخیره کند و با استفاده از شاخص های 0 تا 4 به آنها دسترسی پیدا می کند. یکی از ویژگی های مهم آرایه این است که کل آرایه به عنوان یک بلوک از حافظه اختصاص داده می شود و هر عنصر آن را دریافت می کند. فضای اختصاصی در آرایه هنگامی که یک آرایه تعریف می شود، اندازه آن ثابت می شود. بنابراین اگر در زمان کامپایل در مورد اندازه آرایه مطمئن نیستید، باید یک آرایه به اندازه کافی بزرگ برای قرار گرفتن در قسمت امن تعریف کنید. اما، اغلب اوقات، ما در واقع از تعداد عناصر کمتری نسبت به آنچه که اختصاص داده ایم استفاده می کنیم. بنابراین مقدار قابل توجهی از حافظه در واقع هدر می رود.از سوی دیگر، اگر "آرایه به اندازه کافی بزرگ" در واقع به اندازه کافی بزرگ نباشد، برنامه از کار می افتد.
تفاوت بین اشاره گر و آرایه چیست؟
یک اشاره گر یک نوع داده است که آدرس یک مکان حافظه را ذخیره می کند که برخی از داده ها در آن ذخیره می شود، در حالی که آرایه ها رایج ترین ساختار داده ای هستند که برای ذخیره مجموعه ای از عناصر استفاده می شود. در زبان برنامه نویسی C، نمایه سازی آرایه با استفاده از محاسبات اشاره گر انجام می شود (یعنی عنصر ith آرایه x معادل (x+i) خواهد بود). بنابراین در C، مجموعه ای از اشاره گرها که به مجموعه ای از مکان های حافظه متوالی اشاره می کنند، می توانند به عنوان یک آرایه در نظر گرفته شوند. علاوه بر این، در نحوه عملکرد عملگر sizeof بر روی اشاره گرها و آرایه ها تفاوت وجود دارد. وقتی روی یک آرایه اعمال می شود، عملگر sizeof کل اندازه آرایه را برمی گرداند، در حالی که وقتی روی یک اشاره گر اعمال شود، فقط اندازه اشاره گر را برمی گرداند.