عملیات روی اشاره گرها
کلا 3 نوع عمل را می شود بر روی pointer انجام داد :
1. انتساب اشاره گر ها به همدیگر
2. اعمال محاسباتی جمع و تفریق
3. مقایسه
کلا 3 نوع عمل را می شود بر روی pointer انجام داد :
1. انتساب اشاره گر ها به همدیگر
2. اعمال محاسباتی جمع و تفریق
3. مقایسه
انتساب اشاره گرها به همدیگر :
وقتی دو اشاره گر (pointer) را برابر با یکدیگر قرار دهیم با 2 حالت مواجه خواهیم شد، یکی آدرس و دیگری مقدار است. به کد زیر دقت نمایید :
وقتی دو اشاره گر (pointer) را برابر با یکدیگر قرار دهیم با 2 حالت مواجه خواهیم شد، یکی آدرس و دیگری مقدار است. به کد زیر دقت نمایید :
int *p1, *p2, *p3, a, b, c;
a = 50;
b = 100;
c = 200;
p1 = &a;
p2 = &b;
p3 = &c;
*p1 = *p2;
p1 = p3;
a = 50;
b = 100;
c = 200;
p1 = &a;
p2 = &b;
p3 = &c;
*p1 = *p2;
p1 = p3;
در کد بالا و در خط 5 اشاره گر p1 به جایی که متغیر a در حافظه ذخیره شده اشاره می کند بنابراین *p1 برابر با مقدار آن آدرس یعنی 50 خواهد شد. در دستور خط بعدی آدرس جایی که متغیر b در آنجا ذخیره شده درون اشاره گر p2 قرار می گیرد یعنی به آن آدرس اشاره می کند و چون محتویات آن آدرس برابر با 100 است پس مقدار *p2 برابر با 100 می شود. در سطر 8 با نوشتن این دستور فقط محتویات جایی که p1 به آنجا اشاره می کند درون درون جایی که p2 به آنجا اشاره می کند ریخته می شود و آدرس دو اشاره گر تغییر نخواهد کرد. اما در سطر 9 آدرس جایی که p3 به آنجا اشاره می کند در اشاره گر p1 قرار می گیرد، بنابراین جایی که p1 به آنجا اشاره می کرد برابر با جایی می شود که p3 اشاره می کند که به ازاء این تغییر بنابراین محتویات جایی که p1 به آنجا اشاره می کرد به مقدار 200 تغییر می کند
وقتی اشاره گری را افزایش یا کاهش می دهیم در واقع اینکار را با آدرسها انجام خواهیم داد و متناسب با طول آن متغیر کم یا زیاد می کنیم. در شکل بالا p متغیری از نوع int است پس با هر واحد افزایش، pointer 2 خانه یعنی 2 بایت در حافظه پیش خواهد رفت و متغیر char از نوع char در نظر گرفته شده که با هر واحد افزایش یا کاهش فقط یک خانه کم یا زیاد می شود .
👍1
مقایسه اشاره گرها :
وقتی در مورد اشاره گرها صحبت می کنیم ذهن خود را به سمت آدرس حافظه ببرید. وقتی دو اشاره گر با یکدیگر برابرند که هر دو به یکجا اشاره نمایند، در این صورت هر تغییر در آن آدرس منجر به تغییر هر دو اشاره گر خواهد شد اما اگر مفدار آدرس دو اشاره کر برابر نباشد هر چند که محتویات آن دو آدرس مختلف با هم برابر باشد نمی توان گفت که آن دو با هم برابر هستند زیرا با تغییر در محتوا یا آدرس یکی از آن دو دیگری تغییری نمی کند .
وقتی در مورد اشاره گرها صحبت می کنیم ذهن خود را به سمت آدرس حافظه ببرید. وقتی دو اشاره گر با یکدیگر برابرند که هر دو به یکجا اشاره نمایند، در این صورت هر تغییر در آن آدرس منجر به تغییر هر دو اشاره گر خواهد شد اما اگر مفدار آدرس دو اشاره کر برابر نباشد هر چند که محتویات آن دو آدرس مختلف با هم برابر باشد نمی توان گفت که آن دو با هم برابر هستند زیرا با تغییر در محتوا یا آدرس یکی از آن دو دیگری تغییری نمی کند .
int *p1, *p2, char1, char2;
char1 = char2 = 'Q';
p1 = &char1;
p2 = &char2;
if( p1 == p2 )
true
else
false
char1 = char2 = 'Q';
p1 = &char1;
p2 = &char2;
if( p1 == p2 )
true
else
false
در کد C++ بالا چون اشاره گرها هر یک به آدرسهای مختلفی اشاره می کنند هر چند مقادیر آن آدرسها یکی است اما با هم برابر نیستند .
یکی از اصلی ترین و مهم ترین بخش ها در هر زبان برنامه نویسی شرط ها هستند به طوری که اگر شما پیچیده ترین برنامه هارو هم در نظر بگیرین در نهایت به شرط های ساده درون کد های برنامه میرسید. در این جلسه با دو نوع دستور شرطی if و switch در زبان ++c آشنا خواهیم شد.
در مثال بالا اگر مقدار متغیر a کوچکتر از 50 بود بدنه شرط اجرا می شود و مقدار متغیر a در خروجی چاپ می شود
ولی شرایطی هم به وجود میاد که شما قصد دارین چند شرط رو به صورت پشت سر هم چک کنید. در این صورت شما میتونید از else و else if استفاده کنید:
int a;
cout « "enter num : " « endl;
cin » a;
if(a<50)
{
cout « a « endl;
}
else if(a>50)
{
cout « a « endl;
}
else
{
cout « a « " = 50 " « endl;
}
cout « "enter num : " « endl;
cin » a;
if(a<50)
{
cout « a « endl;
}
else if(a>50)
{
cout « a « endl;
}
else
{
cout « a « " = 50 " « endl;
}
در مثال بالا یک عدد از وردی گرفتیم و در متغیر a قرار دادیم اگر a کوچکتر از 50 بود شرط اجرا میشه اگر بزرگت از 50 بود شرط دوم اجرا میشه و اگر غیر از این دو شرط بود ینی مقدار متغیر a برابر به 50 بود قسمت آخر else اجرا میشه