سلام به همه![]()
كسي هست كه يه كوچولو راجع به اشاره گر ها برام بگه .
ممنون ميشم.
سلام به همه![]()
كسي هست كه يه كوچولو راجع به اشاره گر ها برام بگه .
ممنون ميشم.
مبحث اشاره گرها کوچولو نیست که بشه کوچولو توضیحش داد !
شما توی کدوم قسمت مشکل دارین؟!
اگه يه مقداري در مورد روابط بين ارايه ها و اشاره گر ها و همچنين آف ست بگید ممنون می شم.
سلام دوست عزيز
مبحث اشارهگرها خودش تا اندازهاي پيچيده هست. منتها سعي ميكنم كاربردش رو برات توضيح بدام تا دستت بياد چي به چيه.
ببين فرض كنيم ما يه ماتريس داريم به نام T
خانههاي اين ماتريس از 0 تا 9 هست.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خب براي دسترسي به خانههاي اين ماتريس طبق معمول با ذكر انديس موردنظر ميتونيم به محتويات دسترسي داشته باشيم
مثلا
يعني خانه شماره 6 (چون از 0 شروع ميشه)کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و همونطور كه ميدونيم ذكر اسم ماتريس بدون انديس، آدرس حافظهاي كه ماتريس از اونجا شروع ميشه رو به ما ميده.
و ما با داشتن اين آدرس شروع (آفست) ميتونيم به مكانهاي ديگه ماتريس هم دسترسي داشته باشيم.
فرضا اگر آدرس شروع يه ماتريس 1000 باشه و با توجه به اندازه هر خانه (كه اينجا int هست و هر واحد 2 بايت ميباشد) پس آدرس 1000+2 خانه بعدي را مشخص ميكند، يعني خانه T[1].
اشارهگرها هم براي رسيدن به اين درنظر گرفته شدهاند.
براي تعريف يك اشارهگر، نوع اشارهگر دقيقا بايد با نوع مقصد همسان باشه وگرنه اطلاعات درستي برداشت نخواهد شد.
در اين مثال، اگر بخواهيم اشارهگري براي ماتريس T تعريف كنيم اينطوري عمل ميكنيم:
و نحوه استفاده بدين صورت هست كه بايد آدرس مكاني رو توي P بريزيم و بعد محتويات اين آدرس رو بخونيم يا بنويسيم:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در اين كد ما محتويات خانهاي را با آدرس موجود در P را درون متغير C ميريزيم. و چون محتويات P، ادرس شروع ماتريس هست، پس به محتويات اولين خانه از ماتريس دسترسي داريم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در كل براي رجوع به خانهاي توسط اشارهگر از نماد * استفاده ميكنيم.
در مورد ماتريس گفتيم كه ذكر نام ماتريس بدون انديس، آدرس اولين خانه را به ما برگشت ميدهد، پس براي رجوع به خانههاي بعدي بايد به اشارهگرمان مقداري را اضافه كنيم
يعني براي دريافت محتويات خانه بعدي:
و همينطور براي بدست آوردن آدرس يك متغير بايد از & استفاده كرد.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نام آرایه اشاره گر ثابتی به اولین عنصر آرایه است.
مثلاً این اعلان رو ببین :
شناسه arr در واقع یک اشاره گر به مکان اولین عنصر آرایه یعنی [0] arr هست.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد رو اجرا کن و نتیجه رو ببین:
arr+1 به اندازه سایز arr (سایز int ) آدرس اشاره گر رو جلو می بره.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
" آفست " هم در برخی موارد به عنوان " آدرس " بکار میره.
حافظه رو به بخش هایی(قطعه هایی) تقسیم می کنن و آدرس شروع هر قطعه مشخصه.
هر قطعه مثلاً 64 کیلو بایته. پس میتونیم بایت های هر قطعه رو از صفر شروع به شماره گذاری کنیم.(= آفست)
حالا اگه A024f آدرس شروع یک قطعه باشه و D92f آفست اون قطعه باشه از جمع این دوتا آدرس اصلی(فیزیکی) اون بایت به دست میاد.
فرض کن برنامه شما در قطعه A024f باشه و در این قطعه جا بشه. حالا فقط با استفاده از آفست میتونید به کل بایت های برنامه دسترسی داشته باشید (بدون دانستن اینکه برنامه در کدوم سگمنت یا قطعه لود شده)
نمی دونم تونستم مفهوم رو برسونم یا نه !
موفق باشید.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)