کار با اشاره گرها در c++

آموزش برنامه نویسی C++

آموزش کار با اشاره گرها در c++ سی پلاس پلاس

تعریف اشاره گر در زبان برنامه نویسی c++ : 

به زبان ساده، اشاره‌گر نوعی متغیر است که محتوای آن آدرس یکی از خانه‌های حافظه‌ی کامپیوتر است.

برای کار با اشاره گرها در c++ وقتی عملیات خواندن و نوشتن صادر می شود باید مشخص باشد که این عملیات روی کدامیک از بایت های حافظه صورت گیرد و برای این منظور برای هر یک از خانه های حافظه یک ادرس در نظر گرفته شده است که یک عدد صحیح مثبت است. دسترسی به خانه های حافظه از طریق آدرسش صورت میگیرد.در حافظه ی اصلی به قطعات مساوی با طول تقسیم شده است که به هریک از آن ها یک گوییم.
در داخل هر بایت ها از صفر تا شماره گذاری شده اند.برای دسترسی به یک بایت در داخل یک کافی است در داخل یک تفاوت مکان آن نسبت به ابتدای را بدانیم.که به آن گوییم. آدرس خانه های حافظه به صورت زیر ساخته میشوند.
off set : segment آدرس شروع
اشاره گر : متغیر دوبایتی است که آدرس حافظه را در خود نگه میدارد.

کار با اشاره گرها در c++ سی پلاس پلاس
نوع اشاره گر *
; نام اشاره گر
نوع اشاره گر نوع مقداری را که اشاره گر به آن اشاره می نماید مشخص میکند.


void main ()
{
int a , *p1;
float f , *p2;
char c , *p3;
}

مثال بالا 13 بایت خالی میکنند.
برای دسترسی به محتویات محلی که اشاره گر در c++ به آن اشاره میکند به صورت زیر عمل میکنیم.
p : p محتویات اشاره گر
* p : محتویات محلی که به آن اشاره میکند
برای مثال دستور عدد 20 را دذ خانه ی شماره 1000 قرار میدهد چون از نوع است در خانه ی و قرار میگیرد.
مثال :


void main ()
{
int a , *p ;
p = & a ;
*p =20 ;
(*p)++ ;
cout<< a ;
cout<< *p ;
scanf ( " %d " , p) ;
printf ( " %p " , p) ;
{

یک عدد صحیح دریافت میشود و در محلی که به آن اشاره میکند یعنی متغیر قرار داده میشود.
در قسمت ینی آدرس متغیر چاپ میشود.
عملگرهای جمع و تفریق و همچنین ++ و – – را در مورد اشاره گرها نیز میتوان به کار برد.
نوع اشاره گر در میزان افزایش یا کاهش آن تاثیر دارد مثلا اگر اشاره گری از نوع تعریف شده باشد با ++ دو واحد به آن افزوده میشود.
مثال :


void main ()
{
int * a = ( int * ) 1000 ;
fioat * b = ( float * ) 1000 ;
char * c = ( char * ) 1000 ;
a++ ; b++ ; c++ ;

کار با آرایه ها از طریق اشاره گر ها در c++ سی پلاس پلاس :

نام آرایه در خود آدرس شروع آرایه را دارد بنابراین نام آرایه یک برای کار با اشاره گرها در c++ می باشد که به ابتدای آرایه اشاره میکند.محتویات این اشاره گر را میتوان تغییر داد لذا به آن یک اشاره گر غیرقابل انتقال میگوییم. میتوان آدرس شروع آرایه را در یک اشاره گر معمولی ذخیره کرد سپس از طریق اشاره گر با آرایه کار کرد.


void main ()
{
int a[10] , * p ;
int i ;
p = a ;
for ( i=0 ; i<10 ; i++ , p++ )
scanf ( " %d " , p ) ;
p = a ;
for ( i=0 ; i<10 ; i++ )
printf ( " %d " , * (p+i)) ;
}

اگر به ابتدای آرایه ی اشاره کند دستورات زیر معادل هم هستند.


a[3] =10
* (p+3)=10
* (a+3)=10
p[3] =10

مثال :
برنامه ای بنویسید که یک رشته را گرفته و طولش را محاسبه و چاپ کند.


void main()
{
char s[100] , * p ;
int i ;
gets(s) ;
p =s;
for( i=0 , * p ; p++ , i++)
cout<< i ;
}