با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش ++C در خدمت شما دوستان هستیم . در بخش قبلی با آموزش الگو ها در ++C آشنا شدید، در این جلسه قصد داریم تا با اشاره گر ها در ++C یا Pointer در ++c آشنا شویم.
اشاره گر ها (Pointer) ویژگی های قدرتمند زبان ++C هستند که باعث تفاوت زبان سی پلاس پلاس با زبان های دیگر مانند Java و Python می شود.
اشاره گر ها در ++C برای دسترسی به حافظه و تغییر مقادیر با استفاده از آدرس آن ها به کار می روند.
برای درک اشاره گر ها ابتدا باید بدانید تا داده ها چگونه در کامپیوتر ذخیره می شوند.
هر متغیری را که در برنامه تان ایجاد می کنید، یک مکان در حافظه کامپیوتر به آن اختصاص داده می شود.
مقادیر متغیر ها در واقع در مکان اختصاص داده شده ذخیره می شوند.
برای دانستن اینکه داده ها در کجا ذخیره شده اند، ++C عملگر & را در اختیار ما گذاشته است.
عملگر & آدرس اشغال شده توسط هر متغیر را به ما می دهد.
برای مثال آدرس متغیر var را با var& بدست می آوریم.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { int var1 = 3; int var2 = 24; int var3 = 17; cout << &var1 << endl; cout << &var2 << endl; cout << &var3 << endl; } |
خروجی:
1 2 3 | 0x7fff5fbff8ac 0x7fff5fbff8a8 0x7fff5fbff8a4 |
توجه داشته باشید که شما ممکن است نتیجه یکسانی با آنچه که من گرفتم را نداشته باشید.
علامت ۰x نشان دهنده شانزده شانزدهی بودن آدرس می باشد.
++C این به شما قدرت دستکاری داده ها در حافظه کامپیوتر را مستقیما می دهد.
شما می توانید هر فضایی را هرگونه که می خواهید در حافظه اختصاص دهید.
این کار با استفاده از اشاره گر ها عملی می شود. (البته در سیستم عامل های مدرن اجازه دسترسی به هر آدرس حافظه را ندارید)
متغیر اشاره گر متغیری است که به آدرس مشخصی در حافظه اشاره می کند که آن آدرس در واقع به متغیر دیگری اختصاص یافته است. (به صورت ساده یعنی یک متغیر اشاره گر که می توانیم آن را تنها اشاره گر بنامیم، به متغیر دیگری اشاره می کند)
1 2 3 | int *p; یا int* p; |
دستور بالا یک متغیر اشاره گر به نام p تعریف می کنیم که آدرس حافظه را در خودش نگه می دارد.
عملگر * به این معنی است که این متغیر، یک اشاره گر است.
در اینجا اشاره گر p از نوع int می باشد که یعنی آدرس متغیر هایی از نوع int را در خود ذخیره می کند.
عملگر ارجاع & برای گرفتن آدرس یک متغیر استفاده می شود.
برای گرفتن مقدار ذخیره شده در آدرس، از عملگر * استفاده می کنیم.
برای مثال اگر متغیر num در آدرس حافظه ۰x123 ذخیره شده باشد و حاوی عدد ۵ باشد، عملگر & مقدار ۰x123 و عملگر * مقدار ۵ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> using namespace std; int main() { int *pc, c; c = 5; cout << "Address of c (&c): " << &c << endl; cout << "Value of c (c): " << c << endl << endl; pc = &c; // Pointer pc holds the memory address of variable c cout << "Address that pointer pc holds (pc): "<< pc << endl; cout << "Content of the address pointer pc holds (*pc): " << *pc << endl << endl; c = 11; // The content inside memory address &c is changed from 5 to 11. cout << "Address pointer pc holds (pc): " << pc << endl; cout << "Content of the address pointer pc holds (*pc): " << *pc << endl << endl; *pc = 2; cout << "Address of c (&c): " << &c << endl; cout << "Value of c (c): " << c << endl << endl; return 0; } |
خروجی به صوذت زیر می باشد:
1 2 3 4 5 6 7 8 9 10 11 | Address of c (&c): 0x7fff5fbff80c Value of c (c): 5 Address that pointer pc holds (pc): 0x7fff5fbff80c Content of the address pointer pc holds (*pc): 5 Address pointer pc holds (pc): 0x7fff5fbff80c Content of the address pointer pc holds (*pc): 11 Address of c (&c): 0x7fff5fbff80c Value of c (c): 2 |
توضیحات کد:
برخی از اشتباهات متداول هنگام کار اشاره گر ها به صورت زیر می باشد.
متغیر c و اشاره گر pc مثال بالا را در نظر بگیرید.
جلسه اشاره گر ها در ++C نیز به پایان رسید.
در جلسه بعد به مبحث اشاره گر ها و آرایه ها در ++C خواهیم پرداخت. با ما همراه باشید
sara
awliii
هادی
دم شما گرم.استفاده کردیم.
Ali
سپاسگزارم از اشتراک مطالبتون ولی به نظرم pc = &c* در زمان ایجاد مشکلی ندارد ولی اگر قبلا ایجاد شده باشد… بله نمیتوان به اینصورت دکلرش کرد.
...
ممنون از مطلبتون که به اشتراک گذاشتید ۳>