ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

اشاره گرها Pointers

 
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming
View previous topic :: View next topic  
Author Message
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Wed May 04, 2005 7:39 am    Post subject: اشاره گرها Pointers Reply with quote

اشاره گرها :
متغيري است كه آدرس يك خانه حافظه ( RAM )را نگهداري ميكند . مثلا اگر در اين نوع متغير مقدار 890 باشد ‍ به خانه با آدرس 890 اشاره ميكند . در پاسكال اشاره گر با علامت hat ^ اشاره گر را مشخص ميكنند . حال انكه در زبان c با علامت * اشاره گر مشخص ميشود .
اشاره گر به اولين بايت يك متغير اشاره ميكند .
به مثال زير نگاه كنيد :
program pointers2;
   var
      j,i : integer;
      p : ^integer;
Begin
i:=20;
p=@i ; {comment1}
j:=p^ ; {comment2}
End.

comment1 : در برنامه فوق با استفاده از علامت @ قبل از نام متغير آدرس متغير i را در p ريختيم . ( مشابه اسمبلي ) همانطور كه قبلا نيز اشاره كرديم اشاره گر p از نوع اشاره گر تعريف شده است . در مثال فوق نوع اشاره گر را Integer معين كرديم . يعني متغير اشاره گر p تنها ميتواند ادرس يك متغير Integer را در خود نگه داري كند .
اشاره گر از هر نوعي كه باشد در زبان پاسكال 4 بايت فضا اشغال ميكند . اين 4 بايت به ان دليل است كه دو بايت براي افست ادرس و دو بايت سگمنت ادرس نگهداري ميشود .
comment2 : با قرار دادن علامت ^ بعد از نام اشاره گر به برنامه اعلان ميكنيم كه محتويات آدرسي كه متغير p به انها اشاره ميكند را درمتغير j بريزد . توجه داشته باشيد كه متغير j از نوع Integer است .
در ضمن يادتان باشد كه با دستورات read و write نميتوانيد به اشاره گر مقداردهي كنيد . يا مقدار ان را بخوانيد . اشاره گر ها را نميتوانيد مستقيما با اعداد ادرس دهي كنيد . كه تنها با استفاده از علامت @ ميتوانيد به انها مقدار دهي كنيد . اشاره گر را ميتوان در قسمت const مقدار دهي كرد :
const
x : integer = 9
pointer2 : ^integer =@x
pointer3: ^real=nil
در مثال بالا در pointer3 مقدار nil را ريختيم كه مقدار پوچ (null در c ) هست . و به هيچ جايي اشاره نميكند . اگر محتويات انرا چاپ كنيد مقدار نامشخصي چاپ ميشود
write(pointer3^)
در مورد p^ توجه داشته باشيد كه ميتواند سمت چپ علامت assignment قرار بگيرد . ولي @i نميتواند در سمت چپ اين علامت := باشد .
آدرس يك ثابت را ميتوان بدست اورد به شرطي كه نوع ان را در هنگام تعريف مشخص كنيد .
نوع گونه ديگري از متغير ها وجود دارد به نام pointer اين نوع متغير ميتواند به هر نوع خانه اي از حافظه بدون مشخص كردن نوع ان خانه اشاره كند :
var vahid : pointer ;
   i : integer;
   j : real;
begin
   vahid=@i;
   vahid=@j;
writeln(real(vahid^))
end.
در مثال بالا همانطور كه ميبينيد : در دستور writeln نوع متغير vahid كه از نوع pointer است مشخص شده است . چرا كه اگر بخواهيد بدون تعيين نوع ان مقدار را تغيير دهيد . خطاي كامپايلري رخ ميدهد . چون دستور نميداند vahid كي به پايان ميرسد ؟!
همانطور كه گفتيم نميتوان اشاره گر ها بدون استفادهاز علامت @ مقدار دهي كرد . در نتيجه عمليات محاسباتي نيز نميتوان بر انها انجام داد . اما ميتوان انها را با توابع inc و dec كم و زياد كرد :
inc(vahid)
dec(vahid,2)
توجه داشته باشيد كه در دستور dec(vahid,2) با توجه به نوع vahid اين مقدار 2 متغير است . اگر وحيد به متغيري دو بايتي اشاره كند مقدار 4 تا از ان كم ميشود . عمليات منطقي روي اشاره گر ها تنها با دو علامت = , <> امكان پذير است .
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum