سلام
نمیدونم چرا با اینکه اندیس اول این آرایه صفره ولی بازم کارش رو انجام میده. شما میدونید؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
نمیدونم چرا با اینکه اندیس اول این آرایه صفره ولی بازم کارش رو انجام میده. شما میدونید؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
الان مشکل شما چیه ؟ خب آرایه ها از صفر شماره گذاری میشن نه از 1 .
دایی جون مشکل اینجاست که آرایه من 2 تا سطر به طول 10 داره. سطر اول مختص Ali هستش که بقیه اون با 0\ پر میشه.
سطر دوم که میشه a[1][0]s با James. اما آرایه من اندیس اولش تغییر نمیکنه و هر دو رو چاپ میکنه!!!!
خب وقتی سطر اول شما 10 خونه ای هستش چرا حلقه رو 20 بار لوپ می زنین ؟
وقتی 20 بار لوپ می زنه بعدش میره سطر بعدی آرایه دیگه .
چون متغیرها با آدرسها سرو کار دارن و اندیس و اینا نمی فهمن چیه . ابعاد آرایه هم آدرس هاشون پشت سر همه .
چون 2 تا رشته به طول 10 دارم. اگه رشته من هر دو به طول 10 بود باید 20 بار لوپ بخوره.
من متوجه نمیشم. پردازش به این صورته که وقتی به a[0][0]s رسید از طریق آدرس بره سراغ خونه اول. چون اندیس ها این نشونی رو بهش دادن. حالا من میام میگم a[0][11]s. همچین آدرسی از دید من وجود نداره!!! کامپایلر اینو چه طور تفسیر میکنه؟
تو این آرایه شما فرض کنین آرایه شما از آدرس 0x003bf824 شروع میشه . یعنی آدرس خونه [0][0] آرایه تو حافظه 0x003bf824 هستش . بعدش آدرسها به این صورت هستن :
eحالا آدرس خونه [0][1] تو آدرس 0x003bf82E هست . و اندیس [0][1] معادل [10][0] هست .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چرا ؟
چون محل آدرس خونه [i][j] به این صورت بدست میاد :
که این A باید با آدرس شروع آرایه جمع زده بشه . که این مقدار با [10][0] فرقی نخواهد داشت .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
البته اینجا هنوزم خوبه اگه تو c دو تا آرایه پشت سر هم درست کنی مثل
int a[10];
int b[10];
بعد یه حلقه به صورت زیر درست کنی
for(int i=0;i<20;i++)
a[i]=i;
اون موقع هم من دیدم ارور نمیده استادمون میگفت که حلقه بالا اینجوری میشه
int *p=a;
for(int i=0;i<20;i++,p++)
*p=i;
از اونجاییکه p بعد از 10مرحله تکرار به آرایه دوم می رسد حلقه اولی نیز در باطن
مثل حلقه دوم عمل می کند
مرسی
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)