سلام .
Reference ها شکل دیگه ای از Pointer ها ( اشاره گر ها ) هستند .
Reference ها بدست Compiler میدیرت میشن . بسته به شرایط Compiler تصمیم میگیره که یه Reference چطوری کار کنه و چه معنی بده .
توی بیشتر مواقع Reference ها همون اشاره گر هستند . و در بعضی مواقع فقط یک اسم مستعار برای یک متغییر دیگه .
Compiler اگر ببینه که میتونه یه Reference ی که شما به یک متغییر نسبت دادید رو فقط یک اسم مستعار برای اون متغییر درنظر بگیره ، اینکار رو میکنه ( اگر شرایطش محیا باشه ) . و اگر اندازه یک اشاره گر 4 بایت باشه یا 8 بایت ( در سیستم های ۶۴ بیت اندازه اشاره گر 8 بایت است ) دیگه اون Reference رو یک اشاره گر درنظر نمیگیره . و با این کار درواقع صرفه جویی میکنه .
یکسری تفاوت های بین اشاره گر و ارجاع (Reference) این ها هستند :
-
اشاره گر ها میتونن دوباره به جای دیگه ای اشاره کنند ولی ارجاع ها نه
-
اشاره گر ها حتما فضا اشغال میکنند ولی برای ارجاع ها همیشه اینطور نیست .
-
اشاره گر ها میتونن مقدار null یا (NULL و nullptr ) داشته باشند ولی ارجاع ها نه
-
اشاره گر ها میتونن مقداردهی اولیه نشن ولی ارجاع ها حتما با همون اول مقدار دهی بشن
-
اشاره گر ها میتونن با عملگر ++ و -- به اندازه طول نوعشون تغییر مقدار بدهند ولی ارجاع ها نه
-
اشاره گر ها با عملگر * امکان دسترسی به مقدار رو دارن ولی ارجاع ها بصورت مستقیم (بدون عملگر * )
-
اشاره گر های که به کلاس اشاره میکنن با عملگر <- امکان دسترسی به مقدار رو میدن ولی ارجاع ها با نقطه ( . )
-
بر خلاف اشاره گر ها مجاز به تعریف آرایه و اشاره گر به refrence نیستیم .
موارد دیگه هم میتونه باشه .