PDA

نسخه کامل مشاهده نسخه کامل : اشاره گر ها



shahrzad2006
27-10-2006, 12:02
سلام به همه :biggrin:
كسي هست كه يه كوچولو راجع به اشاره گر ها برام بگه .
ممنون ميشم.

Admiral
27-10-2006, 13:13
مبحث اشاره گرها کوچولو نیست که بشه کوچولو توضیحش داد !

شما توی کدوم قسمت مشکل دارین؟!

shahrzad2006
27-10-2006, 14:49
اگه يه مقداري در مورد روابط بين ارايه ها و اشاره گر ها و همچنين آف ست بگید ممنون می شم.

palizesoftware
27-10-2006, 17:23
سلام دوست عزيز
مبحث اشاره‌گرها خودش تا اندازه‌اي پيچيده هست. منتها سعي ميكنم كاربردش رو برات توضيح بدام تا دستت بياد چي به چيه.
ببين فرض كنيم ما يه ماتريس داريم به نام T

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خانه‌هاي اين ماتريس از 0 تا 9 هست.
خب براي دسترسي به خانه‌هاي اين ماتريس طبق معمول با ذكر انديس موردنظر ميتونيم به محتويات دسترسي داشته باشيم
مثلا

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
يعني خانه شماره 6 (چون از 0 شروع ميشه)
و همونطور كه ميدونيم ذكر اسم ماتريس بدون انديس، آدرس حافظه‌اي كه ماتريس از اونجا شروع ميشه رو به ما ميده.
و ما با داشتن اين آدرس شروع (آفست) ميتونيم به مكان‌هاي ديگه ماتريس هم دسترسي داشته باشيم.
فرضا اگر آدرس شروع يه ماتريس 1000 باشه و با توجه به اندازه هر خانه (كه اينجا int هست و هر واحد 2 بايت ميباشد) پس آدرس 1000+2 خانه بعدي را مشخص ميكند، يعني خانه T[1].
اشاره‌گرها هم براي رسيدن به اين درنظر گرفته شده‌اند.
براي تعريف يك اشاره‌گر، نوع اشاره‌گر دقيقا بايد با نوع مقصد همسان باشه وگرنه اطلاعات درستي برداشت نخواهد شد.
در اين مثال، اگر بخواهيم اشاره‌گري براي ماتريس T‌ تعريف كنيم اينطوري عمل ميكنيم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و نحوه استفاده بدين صورت هست كه بايد آدرس مكاني رو توي P بريزيم و بعد محتويات اين آدرس رو بخونيم يا بنويسيم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در اين كد ما محتويات خانه‌اي را با آدرس موجود در P را درون متغير C ميريزيم. و چون محتويات P، ادرس شروع ماتريس هست، پس به محتويات اولين خانه از ماتريس دسترسي داريم.
در كل براي رجوع به خانه‌اي توسط اشاره‌گر از نماد * استفاده ميكنيم.
در مورد ماتريس گفتيم كه ذكر نام ماتريس بدون انديس، آدرس اولين خانه را به ما برگشت ميدهد، پس براي رجوع به خانه‌هاي بعدي بايد به اشاره‌گرمان مقداري را اضافه كنيم
يعني براي دريافت محتويات خانه بعدي:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و همينطور براي بدست آوردن آدرس يك متغير بايد از & استفاده كرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Admiral
27-10-2006, 17:37
نام آرایه اشاره گر ثابتی به اولین عنصر آرایه است.

مثلاً این اعلان رو ببین :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شناسه arr در واقع یک اشاره گر به مکان اولین عنصر آرایه یعنی [0] arr هست.

این کد رو اجرا کن و نتیجه رو ببین:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

arr+1 به اندازه سایز arr (سایز int ) آدرس اشاره گر رو جلو می بره.

Admiral
27-10-2006, 17:50
" آفست " هم در برخی موارد به عنوان " آدرس " بکار میره.

حافظه رو به بخش هایی(قطعه هایی) تقسیم می کنن و آدرس شروع هر قطعه مشخصه.

هر قطعه مثلاً 64 کیلو بایته. پس میتونیم بایت های هر قطعه رو از صفر شروع به شماره گذاری کنیم.(= آفست)

حالا اگه A024f آدرس شروع یک قطعه باشه و D92f آفست اون قطعه باشه از جمع این دوتا آدرس اصلی(فیزیکی) اون بایت به دست میاد.

فرض کن برنامه شما در قطعه A024f باشه و در این قطعه جا بشه. حالا فقط با استفاده از آفست میتونید به کل بایت های برنامه دسترسی داشته باشید (بدون دانستن اینکه برنامه در کدوم سگمنت یا قطعه لود شده)

نمی دونم تونستم مفهوم رو برسونم یا نه !

موفق باشید.

shahrzad2006
27-10-2006, 21:58
ممنون دوست عزيز