Dereference کردن اشارهگر در پاسکال شیگرا

Dereference کردن اشارهگر در پاسکال شیگرا
به واکنشی شیئی که اشارهگر به آن اشاره میکند Dereference گفته میشود
در بعضی موارد شما نیاز به Dereference کردن یک اشاره گر خواهید داشت
برای مثال فرض کنید که یک رکورد دانشجو را به صورت پویا ایجاد و مقدار دهی کرده اید و حال قصد دارید
که محتویات آن را به رکورد دیگری که حافظه ان از Stack تامین شده است کپی کنید.
type PStudent = ^TStudent; TSudent = record Name : String[20]; Family : String[30]; end; Var HeapStudent : TPSudent: StackStudent : TSudent: begin HeapStudent := Allocem(SizeOf(TStudent)); HeapStudent.Nmae := 'Wiki'; HeapStudent.Family := 'Delphi'; StackStudent :=HeapStudent^; FreeMem(HeapStudent); end;
توجه داشته باشید که در برنامه فوق از عبارت زیر استفاده شده است
StackStudent := HeapStudent^;
عبارت فوق شامل عملگر اشاره گر ^ است و این عملگر باعث Dereference کردن اشاره گر میشود
بدین مفهوم که به کامپایلر میگوید ” شیئی را که اشاره گر به ان اشاره میکند برگردان ”
توجه داشته باشد که اگر عبارت مورد نظر فاقد عملگر اشاره گر بود .
StackStudent := HeapStudent;
برای کامپایلر این مفهوم را داشت که باید ادرس اشاره گر را باز گرداند و این عبارت کارنخواهد کرد چرا ؟
به این دلیل که HeapStudent شامل ادرسی ازحافظه است
اما StackStudent یک رکورد است و شما نمیتوانید ادرس حافظه را به رکورد انتساب دهید