دوستان خوبم سلام
توی خط اول برنامه به آرایه ی string1 اندازه ی 5 رو دادم اما وقتی بیشتر از 5 کاراکتر وارد می کنم باز هم اونا رو نمایش میده!کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس فلسفه ی وجودیاین اندازه چیه؟
دوستان خوبم سلام
توی خط اول برنامه به آرایه ی string1 اندازه ی 5 رو دادم اما وقتی بیشتر از 5 کاراکتر وارد می کنم باز هم اونا رو نمایش میده!کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس فلسفه ی وجودیاین اندازه چیه؟
فلسفش اینه که اون اندازه یعنی کشکبرای همینه که خالق ++C توصیه میکنه از آرایه های C تا حد ممکن استفقاده نکنیین
فكر نكنم اين قدر هم كشك باشه!!!
اين 5تا براي string1 در نظر گرفته ميشه. حالا اگر تصادفا(تويه حافظه) string2 بعد از string1 ذخيره شده باشه و اول به string2 مقدار داده باشيد و بعد بجاي وارد كردنه 5تا , 6تا براي string1 وارد كنيد , اونوقت ديگر تويه اولين خونه ي string2 مقدار ششم string1 است, در حالي كه بايد اولين مقدار string2 باشد.![]()
بله به راحتی می تونه تو خونه های رزرو نشده هم عدد بذاره . چون دقیقا آدرسشو داره . چون آدرس خونه آخر آرایه رو که داره و نوع داده رو هم می دونه . پس می تونه تو اون خونه قرار بده . موقع خوندن هم آرایه هیچ وقت بررسی نمی کنه که اندیسش out of range هست یا نه . پس هر اندیسی بدین مقدارشو از حافظه پیدا می کنه میاره .
خب پس اگر اینطور که میگید باشه یعنی اصلا به اندازه ای که به آرایه میدیم توجهی نمی کنه خب این همون....کشک میشه دیگهنمیشه؟
نه . تقریبا کشکه . پست جناب pd رو یه بار دیگه بخونین :
فكر نكنم اين قدر هم كشك باشه!!!
اين 5تا براي string1 در نظر گرفته ميشه. حالا اگر تصادفا(تويه حافظه) string2 بعد از string1 ذخيره شده باشه و اول به string2 مقدار داده باشيد و بعد بجاي وارد كردنه 5تا , 6تا براي string1 وارد كنيد , اونوقت ديگر تويه اولين خونه ي string2 مقدار ششم string1 است, در حالي كه بايد اولين مقدار string2 باشد.![]()
خب اگر تصادفاstring2 بعد از string1 ذخیره نشده باشه چی؟
از 5 به بعد رو توی اولین متغیر همنوع بعد از خودش ذخیره می کنه؟
به هر حال منظورتون اینه که مقدار اضافه توی یه متغیر دیگه ذخیره میشه پس چرا وقتی همین متغیر روcout می کنیم با تمام اجزایی که گرفته اونو نمایش میده مگر اونا توی یه متغیر دیگه ذخیره نشدن؟![]()
اون موقع همون کشک می شه .خب اگر تصادفاstring2 بعد از string1 ذخیره نشده باشه چی؟
توی متغیر دیگه نه . توی یه آدرس از حافظه که اسم آرایه هم براش به منزله اسم متغیر هست .به هر حال منظورتون اینه که مقدار اضافه توی یه متغیر دیگه ذخیره میشه پس چرا وقتی همین متغیر روcout می کنیم با تمام اجزایی که گرفته اونو نمایش میده مگر اونا توی یه متغیر دیگه ذخیره نشدن؟![]()
من هیچ وقت نگفتم توی یه متغیر دیگه .
کامپایلر موقع تعریف متغییر های محلی اول مقدار متغیرهایی که مقدار ثابت (رشته ای یا عدد) دارن رو در حافظه (آدرس متغییرها) میریزه بعد از اینپس چرا وقتی همین متغیر روcout می کنیم با تمام اجزایی که گرفته اونو نمایش میده مگر اونا توی یه متغیر دیگه ذخیره نشدن؟
متغییر های مقدار دهی نشده رو قرار میده برای همین تو مثال شما به string1 هر مقداری بدی به string2 کاری ندراه
ولی بعدش به دلایلی احتمال کرش برنامتون هست(اگه مقدار string1 زیاد باشه)
Last edited by hoax3r; 27-11-2009 at 17:48.
یعنی چیییییییییییییییییییییییی ؟
یه آدرس از حافظه که اسم آرایه هم به منزله ی اسم متغیر هست خب یه متغیره دیگه!نیست؟
؟
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)