نگاهی دوباره به اشاره گر ها

نگاهی دوباره به اشاره گر ها

همیشه در طول ترم های دانشگاه و در دروس برنامه نویسی به دلیل کوتاهی ترم تا اساتید محترم به مبحث اشاره گر ها میرسند ترم به پایان میرسد و دانشجویان این مبحث را به خوبی یاد نمیگیرند.در این مطلب سعی میکنیم به  رفع ابهام و آموزش این مسله بپردازیم…

در این مطلب ما از زبان ++C کمک میگیریم .

چرا اشاره گر ها مهم هستند ؟

جواب این سوال را میتوان به این صورت پاسخ داد ” چرا در برنامه بهتر از پایگاه داده استفاده کنیم ؟! ” . استفاده از اشاره گر ها باعث راحتی کار و تمیزی کد میشود همچنین باعث ارتباط راحت تر بین اجزا میشود.

متغیر ها حال از  هر جنسی باشند در مموری ذخیره میشوند.یعنی به میزان جنس آن بلاک هایی از مموری به آن اختصاص داده میشود.

هر یک از این بلاک ها پس یک محتوایی میتوانند داشته باشد. حال هر یک از این بلاک ها یک ادرس در حافظه دارند.پس هر بلاک ۲ مشخصه خواهد داشت.

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

شروع به کار با اشاره گر ها

 

آدرس یک متغیر را میتوان با گزاشتن یک & ( ampersand ) میتوان درون یک اشاره گر ریخت .

;pointer = &var

در اینجا آدرس var در pointer ریخته میشود.

آدرس ها  در مموری تا قبل از اجرا مشخص نیست ولی ما برای راحت تر ساختن این آموزش آدرس var را ۱۰۰۰ میگیریم.

حال به مثال زیر توجه کنید :

;var =10
;var2 = var
;pointer = &var

در اینجا در var2 محتوای var یعنی ۱۰ است و در pointer ادرس var یعنی ۱۰۰۰ است.

حال میتوان با داشتن آدرس یک متغیر به محتوای آن دسترسی پیدا کرد . به مثال زیر توجه کنید :

;content = *pointer

در اینجا اشاره گر pointer به var اشاره کرده و ادرس var در ان است ( مقدار ۱۰۰۰ ) , حال با گزاشتن ستاره (*) قبل اشاره گر به محتوای آن چه اشاره میکند را نشان داد.یعنی حال در content مقدار ۱۰ که مقدار var است قرار میگیرد.

توجه شود که :

;content = pointer

فقط ادرس var یا همان محتوای اشاره گرا داخل content می رود ( یعنی ۱۰۰۰ )

;content = *pointer

محتوای ان بلاک از حافظه که pointer به ان اشاره میکند (‌یعنی var با مقدار ۱۰ )

پس & به آدرس اشاره اختصاص داده و * مقدار اشاره شده را بر میگرداند.

مثال – اگر حقایق زیر برقرار باشد :

;var = 20
;pointer = &var

گزاره های زیر صحیح است :

;var == 20
;var == 1000&
;pointer == 1000
;pointer = 20*

تعریف کردن یک اشاره گر

 

برای تعریف اشاره گر میتوان به چند جنس زیر تعریف کرد :

;int * pointer
;char * pointer
;double * pointer

هر یک از این جنس تعریف های بالا با توجه به نوع داده ای که به آن اشاره میکنند معین میشود ولی در اصل همه این مدل ها اشاره گر هستند و یک میزان مشخص از بلوک های حافظه را اشغال میکنند.

 

اشاره گر ها در آرایه ها

 

آرایه ها نیز از مفهموم اشاره گر ها استفاده میکنند ( به خانه اول یک ٰآرایه اشاره شده و به میزان طول ٰآرایه حافظه اشغال میکند . )

;[int array [10
;int * pointer

عبارت زیر  همواره درست است :

;pointer = array

در این حال اشاره گر و آرایه محتوای تقریبا یکسانی دارند و تفاوت آنها این است که اشاره گر میتواند به هرجا اشاره کند ولی آرایه همان ۱۰ بلوکی که از جنس int برای ان در نظر گرفته شده را اشاره میکند.

در زیر یک مثال از نحوه اختصاص اشاره گر به خانه های آرایه به روش های گوناگون آمده است :

;[int array [5

;int * pointer

;pointer = array

;pointer =10*

;++ pointer 

;pointer = 20*

;[pointer = &array[2

;pointer = 30*

;pointer = array +3

;pointer = 40*

;pointer = array

;pointer +4 ) = 50)*

خروجی این آرایه به صورت زیر است :

10, 20 ,30 , 40 , 50

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

امیدوارم مفید واقع شده باشد.
با وبسایت ما همراه باشید.

 


دیدگاه ها

یک دیدگاه ارسال کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


The reCAPTCHA verification period has expired. Please reload the page.