پوینترها (Pointers)
«پوینتر (Pointer)» یک متغیر است که «آدرس حافظه (Memory Address)» متغیر دیگری را نگه می دارد. بنابراین با پوینتر می توانیم غیرمستقیم به همان داده دسترسی بگیریم.
ساخت پوینتر و گرفتن آدرس
با «عملگر ارجاع (&)» آدرس متغیر را می گیریم. سپس آدرس را در یک پوینتر از همان نوع ذخیره می کنیم.
int myAge = 43;
printf("%d\n", myAge);
printf("%p\n", &myAge);
نکته: آدرس ها معمولاً هگز هستند و بین اجراها تغییر می کنند.
تعریف پوینتر با *
علامت «*» در تعریف، «متغیر پوینتر» می سازد. نوع پوینتر باید با نوع داده هدف یکی باشد.
int myAge = 43;
int* ptr = &myAge;
printf("%d\n", myAge);
printf("%p\n", &myAge);
printf("%p\n", ptr);
نکته: int* ptr و int *ptr هر دو درست هستند.
Dereference با *
علامت «*» خارج از تعریف، «اپراتور Dereference» است. یعنی مقدار داخل آدرس را می خواند.
int myAge = 43;
int* ptr = &myAge;
printf("%p\n", ptr);
printf("%d\n", *ptr);
گام های عملی
- یک متغیر بساز و مقدار بده.
- با
&آدرس را بگیر. - یک پوینتر هم نوع تعریف کن.
- آدرس را به پوینتر بده.
- با
*مقدار را از پوینتر بخوان.
هشدار: با پوینترها بااحتیاط کار کن؛ آدرس اشتباه می تواند داده ها را خراب کند.
برای پایه آدرس ها به آدرس حافظه برو. همچنین ادامه کار با آرایه ها در پوینترها و آرایه ها است.
جمع بندی سریع
- پوینتر آدرس یک متغیر را نگه می دارد.
&آدرس می دهد؛*مقدار را می خواند.- نوع پوینتر با داده یکی باشد.
- آدرس ها هگز هستند و تغییر می کنند.
- احتیاط؛ خطاها خطرناک اند.