تفاوت reference با اشاره گر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تفاوت reference با اشاره گر

+6 امتیاز

reference چیه ؟ آیا با اشاره گر تفاوتی داری ؟

int & a=b;
int*a=&b;

 

سوال شده مرداد 21, 1393  بوسیله ی sailent (امتیاز 355)   16 44 59
دوباره تگ گذاری شد آبان 17, 1393 بوسیله ی BlueBlade

2 پاسخ

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

سلام .

Reference ها شکل دیگه ای از Pointer ها ( اشاره گر ها ) هستند .

Reference ها بدست Compiler میدیرت میشن . بسته به شرایط Compiler تصمیم میگیره که یه Reference چطوری کار کنه و چه معنی بده .

توی بیشتر مواقع Reference ها همون اشاره گر هستند . و در بعضی مواقع فقط یک اسم مستعار برای یک متغییر دیگه .

Compiler اگر ببینه که میتونه یه Reference ی که شما به یک متغییر نسبت دادید رو فقط یک اسم مستعار برای اون متغییر درنظر بگیره ، اینکار رو میکنه ( اگر شرایطش محیا باشه ) . و اگر اندازه یک اشاره گر 4 بایت باشه یا 8 بایت ( در سیستم های ۶۴ بیت اندازه اشاره گر 8 بایت است ) دیگه اون Reference رو یک اشاره گر درنظر نمیگیره . و با این کار درواقع صرفه جویی میکنه .

 

یکسری تفاوت های بین اشاره گر و ارجاع (Reference) این ها هستند :

  • اشاره گر ها میتونن دوباره به جای دیگه ای اشاره کنند ولی ارجاع ها نه
  • اشاره گر ها حتما فضا اشغال میکنند ولی برای ارجاع ها همیشه اینطور نیست .
  • اشاره گر ها میتونن مقدار null یا (NULL و nullptr ) داشته باشند ولی ارجاع ها نه
  • اشاره گر ها میتونن مقداردهی اولیه نشن ولی ارجاع ها حتما با همون اول مقدار دهی بشن
  • اشاره گر ها میتونن با عملگر ++ و -- به اندازه طول نوعشون تغییر مقدار بدهند ولی ارجاع ها نه
  • اشاره گر ها با عملگر * امکان دسترسی به مقدار رو دارن ولی ارجاع ها بصورت مستقیم (بدون عملگر * )
  • اشاره گر های که به کلاس اشاره میکنن با عملگر <- امکان دسترسی  به مقدار رو میدن ولی ارجاع ها با نقطه ( . )
  • بر خلاف اشاره گر ها مجاز به تعریف آرایه و اشاره گر به refrence نیستیم .

موارد دیگه هم میتونه باشه .

پاسخ داده شده مرداد 22, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد مرداد 22, 1393 بوسیله ی sailent
یک تفاوت دیگه اینه که عملگر & برای اشاره گر ها آدرس خود اشاره گر رو بر می گردونه ولی برای refrence آدرس محلی که refrence بهش اشاره می کنه برگشت داده میشه .
+4 امتیاز

بله تفاوت داره. reference فقط یه تغییر اسم برای متغیرهاست:

#include <iostream>
using namespace std;


int main()
{
    int a = 2;
    int& b= a;
    b = 3;
    cout<< a;
    cin.get();
}

در این برنامه b همون a هست با همون حافظه برای همین وقتی به b مقدار دادیم a  هم تغییر کرده. این هم یه نسخه مشابه:

#include <iostream>
using namespace std;


void f(int& b)
{
    b = 3;
}

int main()
{
    int a = 2;
    f(a);
    cout<< a;
    cin.get();
}

جزئیات دیگه‌ای هم هست که باید خودتون مطالعه کنید.

پاسخ داده شده مرداد 22, 1393 بوسیله ی irancplusplus (امتیاز 203)   1 2 14
...