یشاندهر pointer
كهرهسهیهكی گرنگی بهرنامه داڕشتنه له زمانهكانی C و C++ دا. گهرچی نیشاندهر ئاسان خۆی نیشان نادات، بهڵام گهر بهرنامه داڕێژ له چمكی بنهڕهتی نیشاندهر تێبگات ئهوا دهتوانێت هونهر بنوێنێت تیایدا، بهشێوهیهك كه له زمانهكانی تری بهرنامه داڕشتندا نهكرێت.
نیشاندهر چییه؟
له ڕاستیدا نیشاندهر گۆڕاوێكی ئاساییه، جیوازی نێوان نیشاندهر و گۆڕاوێكی ئاسایی لهوهدایه كه نیشاندهر لهبری ئهوهی نرخ (ژماره، دهق، هێما..هتد) لهخۆی بگرێت، ناونیشانی شوێنێكی دیاریكراو نیشاندهدات له RAM دا، ناوهكهیشی ههر له كردارهكهیهوه ناونراوه. ڕوونكردنهوهی نیشاندهر تاڕادهیهك نزیكه له گۆڕاوی ئاسایی، له نیشاندهردا هێمای * زیاد دهكرێت له نێوان جۆر و ناوی گۆڕاوهكهدا:
int* naw;
تهماشای شێوهی خوارهوه بكه.
نیشاندهر ههندێك ئاسانكاریی كردووه له بهرنامه داڕشتندا، بههۆیهوه دهتوانین:
– بهشێوهیهكی ناجێگیر(داینامیكی) شوێن له بیرگه RAM دا بگرین.
– نرخی ڕاگهیێن و بهڵگهكانی نهخشهكان ڕاستهوخۆ بدهین و، بگۆڕین.
– پهیكهره ئاڵۆزهكانی دراوهكان شیتهڵ بكهین، وهك List, Tree كه به نیشاندهر پێناس دهكرێن و، پهیكهرهكهیان دروست دهبێت.
پێناس و ڕوونكردنهوهی نیشاندهر
تاكو گۆڕاوێك وهك نیشاندهر پێناس بكهین دهبێت بهم شێوازهی خوارهوه له بهرنامهدا بیناسێنین:
بوونی هێمای * جیاكهرهوهیه له نێوان پێناسكردنی نیشاندهر و گۆراوی ئاساییدا. نموونه:
int* jimare;
char* wshe;
گرنگه هێمای * بكهوێته نێوان جۆر و ناوی گۆڕاوهكهوه، ئیتر ڕاستهوخۆ لكابێت به ناوهكه یان جۆرهكه هیچ كاریگهرییهكی نابێت لهسهر پێناس كردنهكه، وا بهباش زانراوه كه به ناوهكهوه بلكێنرێت تاكو وهرگێڕهكه زوو بیناسێتهوه.
ئامادهكردنی نیشاندهر پێش بهكاربردن
پاش ئهوهی نیشاندهر پێناس كرا، پێویسته بهر له بهكاربردن ئاماده بكرێت و ناونیشانێكی پێبدرێت، بێ پێچهوانهوه ئهنجامی چاوهڕواننهكراو ئاكامی كردارهكن دهبێت.
ههر وهك باسكرا نیشاندهر ناونیشانی شوێنێك لهخۆ دهگرێت، ئهم ناونیشانه كاتێك وهردهگرێت كه ڕوونكردنهوهی نیشاندهرهكه دهدهین، پێدهچێت ناونیشانی وهرگیراو له بهرنامهیهكی تری ناچالاكدا بهكارچووبێت، كاتێك مامهڵه لهگهڵ ئهم نیشاندهرهدا دهكرێت و نرخهكهی دهگۆڕین بهرنامهكهی تر كارهكهی ناتهواو دهبێت، یاخود بهرنامهكهی خۆمان ههڵه نیشاندهدات.. له سیستهمه كۆنهکاندا دهبووه هۆی لهكار كهوتنی سیستهمی كارپێكهر و سهر لهنوێ كاركردنهوهی PCـیهكه. لهبهرئهوه زۆر پێویسته بهئاگادارییهوه مامهڵه لهگهڵ نیشاندهر بكهین. بۆ وێنه نرخێكی لهگهڵ پێناس كردندا بدهینێ:
char* naw=”zanist”;
int *n = NULL;
نموونه:
int n=10;
int* p= &n;
لێرهدا نیشاندهری p ، نیشاندهری ناونیشانی گۆڕاوی n ـه كه له جۆری ژمارهی تهواو پێناسكراوه.
هێمای & بۆ وهرگرتنی ناونیشانی گۆڕاوی n بهكارچووه، چونكه p نیشاندهره و ناونیشانێك وهردهگرێت.
تاكوو زیاتر ڕوونتر بێت، نموونهكه له بهرنامهیهكی كرداریدا بهكاردهبهین:
void main(void) cout << n << endl << p; |
پاش ئهنجامدانی ئهم بهرنامهیه، لهسه كۆنسۆڵهكه دوو ژماره دهردهكهون:
10
00234970
ژمارهی یهكهم نرخی n و دووهم ناونیشانی شوێنی ههڵگرتنی n له RAM دا، كه نیشاندهرهكه p نیشانی دهكات.
ئێستا گهر بمانهوێت ناوهڕۆكی n له ڕێی گۆڕاوهكهوه پیشان بدهین لهسهر كۆنسۆڵهكه، ئهوا دهنووسین:
cout << *p;
لهسهر كۆنسۆڵهكه 10 پیشان دهدرێت.
ئهمه ئهوه دهگهیهنێت كه به بهكار بردنی هێمای * لهگهڵ نیشاندهرهكه ڕاستهوخۆ مامهڵه لهگهڵ ناواخنی نیشاندراوهكهدا n دهكهین. ههروهها به بهكار بردنی هێمای & لهگهڵ گۆڕاوهكهدا، مامهڵه لهگهڵ ناونیشانی شوێنه تیاههڵگیراوهكهدا دهكهین، لهمهوه ئهم دوو دهربڕینه ههمان ئهنجام دهدهن:
cout << &n;
cout << p;
ڕوونكردنهوهكه لهم بهرنامه بچووكهدا جێبهجێ دهكرێت:
#include <iostream.h> cout << n <<” “<< p << endl; |
بهههمان شێوه دهتوانین سوود له نیشاندهر بگۆڕین بۆ گۆڕینی نرخی گۆڕاوێك:
*p = 4;
بهگۆڕینی ناوهڕۆكی شوێنی نیشاندراو، ناوهڕۆكی گۆڕاوهكهش n دهگۆڕێت.
#include <iostream.h> cout << “n=” << n << endl; |
|
دهبینین پاش جێبهجێ كردنی ئهم بهرنامهیه، لهسهر كۆنسۆڵهكه ئهم دهربڕینانه دهردهكهوێت:
n=10
n=4
گۆڕینی نرخی n بههۆی نیشاندهرهكهوه ئهنجام دراوه.