کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اشکال در خط :
هست.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بهتره برای ایجاد یک رشته از کاراکتر ها همیشه از آرایه استفاده کنید مثل زیر:
در آرایه ها همیشه متغییر بدون اندیس به اولین عضو آرایه اشاره میکنه.اما در مورد اول, اشارگر به اشارگر آرایه نسبت داده میشه یعنی دو مرحله اشاره صورت میگیره که در نهایت در تابع سعی بر تغییر اشارگر میکنید که با کرش مواجه میشید.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شما این دستور رو تماشا(!) کنید:
وقتی به فراخوانی تابع میرسه، میشه انتساب اشاره گرها. که آدرس موجود در p به درون a ریخته میشود و هر دو به یک نقطه (که همون C است) اشاره میکنند.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما تو اون رشته ها:
مگه متغیر C دارنده ی آدرس اولین خونه رشته نیست؟ مگه موقع ارسال، انتساب اشاره گر ها صورت نمیگیره و Str تبدیل به یک نام دیگه برای اون محل حافظه نمیشه؟
کاملا درسته و علتش هم اینه که خود c یک اشارگر نیست!وقتی به فراخوانی تابع میرسه، میشه انتساب اشاره گرها. که آدرس موجود در p به درون a ریخته میشود و هر دو به یک نقطه (که همون C است) اشاره میکنند.
در کد قبلی آدرس اشارگر در اشارگر دیگر قرار میگرفت.
شما در تابع توسط عملگر دسترسی به مقدار (*) به آدرس اشارگر که در واقع به عنوان مقدار (Value) در اشاگر دیگر ریخته شده دسترسی پیدا میکنید نه به حرف t یا اولین خانه از آرایه.
طبق تصویر:
![]()
Last edited by god of war 2; 05-06-2012 at 22:07. دليل: اضافه کردن تصویر
اشکال کد اولتون استفاده غلط از اشاره گر هاست. در واقع از لحاظ ساختاری و ظاهری مشکل نداره . مشکل تویه پاس دادن متغییر ها نیست. مشکل تویه رم و ران تایم اتفاق میوفته.
برای اثبات این و تست کنید:
جالب بود ! نه ؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فرق int با رشته اینه که وقتی به int اشاره میکنید میشه کل 2بایت(اگه int رو 2بایتی در نظر بگیریم) ولی وقتی ب رشته اشاره میکنید میشه 1 char اولش. و حتما این و میدونید که محل اشاره گر و محلی که بهش اشاره میکنه جداست. تویه مثال قیلی اشاره گرها مورد نظر هستن نه رشته ای که اشاره میکنید. رشته میتونه 100 char باشه مثلا ولی اشاره گر فقط به خونه اول اشاره میکنه.
اول این کد و تست کنید تا بعد اگه لازم بود توضیح بدم.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by p d; 05-06-2012 at 22:16.
تشکر از هر دو دوست.
من چندین بار پستتون رو از اول تا آخر خوندم، ولی خب، مشکل IQ تو این زمونه شایع هستش.
توی تصویر زیر متغیر a دارای آدرس 16CC و اشاره گر هم دارای آدرس 12FC میباشد. ما با استفاده از عملگر * میگیم محتویات آدرسی که در تو هست رو نشون بده. مثلا cout << *p
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خب تصویر زیر هم توی c یه آدرسه. میخواهیم اون رو دیرفرنس کنیم و توش مقدار بریزیم.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
راستی یه نکته. اون پنج بایت بالا بدون نام هستش دیگه؟
ممنون
خب تویه این کد دقیقا این اتفاق میوفته دیگه .
جای 1 ؛ 8 میذاره.
مشکل کجاست الان ؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مشکل اینجاست که آرایه مشکل نداره، ولی اشاره گر رشته ای مشکل داره. من میخوام به یه درکی برسم که چرا اشاره گر رشته ای و دیفرنس کردن و مقدار دادن متفاوته با آرایه ها.
همونطور که میدونید آرایه هم فرزند اشاره گرهاست (ولی خب استاتیک)
در ضمن یکی بگی این دو تا چیه هستن. تفسیر کنه، آیا اولیت عملگرها تو این دو تا رعایت میشه؟
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
راستی شما بچه شمسی پور هستی؟
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)