PDA

View Full Version : Referencing و Dereferencing



C3phalex1n_0x
دوشنبه 30 تیر 1393, 22:55 عصر
سلام، کسی می تونه فرق این دو اصطلاح را در استفاده از اشاره گر ها توضیح بده؟!
مرسی.

کامبیز اسدزاده
سه شنبه 31 تیر 1393, 09:45 صبح
سلام، کسی می تونه فرق این دو اصطلاح را در استفاده از اشاره گر ها توضیح بده؟!
مرسی.

سلام ؛

به طور کلی اشاره گرها در C++ يكي از پركاربردترين مفهومات در برنامه نويسي مي باشند که اشاره گرها براي دسترسي به حافظه heap مورد استفاده قرار میگیرند که به طور خاصی در C++ ما میتونیم با اشاره گرها رسما بازی کنیم که این امکان در زبان های مشابهی مثل Java وجود ندارد.

وقتی ما میایین یک متغیری رو تعریف میکنیم مثلا به اسم x داراي دو مؤلفه هستش يكي محتواي آن خانه از حافظه و ديگري آدرس آن خانه در حافظه.


حالا فرق بین غیر مرجع (Dereferencing) و مرجع (Referencing) در چیه؟
خب در Dereferencing ما توسط علامت (*) ستاره یا به اصطلاح رسمی (asterisk character) اشاره میکنیم به محتویات خانه در حافظه.
و اما در حالت مرجع (Referecing) : ما توسط علامت (&) اشاره میکنیم به آدرس موجود در حافظه که برای متغیر درنظر گرفته شده است.

به این مثال توجه کنید :


#include <iostream>


using namespace std;


int main()
{


int i = 5;
int * p;
p = &i; // برگشت دهنده آدرس حافظه از متغیر که مقدارش هست 5




int j = 5;
int * z;
z = &i;
*z = 7; // برگشت مقداری که در حافظه موجود در متغیر تعریف شده یعنی 7




int a = 1;


cout << p << endl;
cout << *z << endl;


getchar();


}


در قسمت اول از روش مرجع استفاده کردیم و در قسمت دوم از حالت غیر مرجع استفاده کردیم فرقشون این هست در حالت اول خروجی میشه آدرس متغیر در حافظه یعنی : 0039FB54 و در مقدار دوم خروجی میشه مقدار موجود در متغیر یعنی 7