PDA

View Full Version : سوال: مقدار دهی آرایه به این شکل خاص



Sundown
پنج شنبه 17 تیر 1389, 20:06 عصر
با سلام
میخواستم ببینم دلیل چاپ عدد 5 در برنامه زیر چیه ؟
از کد به نظر میرسه که عدد 4 باید چاپ شه ولی عدد 5 چاپ میشه چرا ؟



int a[3][3]={{1,8},(2,4,6),(5)};
cout<<a[1][1];

PC2st
پنج شنبه 17 تیر 1389, 21:13 عصر
چون از پرانتز به جای { و } استفاده شده :لبخند: صحیح شده:

int a[3][3]={{1,8},{2,4,6},{5}};
cout<<a[1][1];

Sundown
پنج شنبه 17 تیر 1389, 21:48 عصر
چون از پرانتز به جای { و } استفاده شده :لبخند: صحیح شده:

int a[3][3]={{1,8},{2,4,6},{5}};
cout<<a[1][1];


این و که میدونم
ببینید این یکی از سوالات کنکور کاردانی به کارشناسی بوده
این سوال رو داده و گفته خروجی چیه ؟
وقتی این برنامه رو کامپایل میکنم نتیجه عدد 5 میشه. میخوام بدونم چرا ؟
نگفتم که اصلاحش کنید.
ممنون

PC2st
پنج شنبه 17 تیر 1389, 22:20 عصر
چون کاما در زبان ++C یک مفهوم خاص داره... اگر درون { و } نباشه البته.
در جایی که چند دستور یا چند مقدار با کاما از هم جدا شدند، آخرین آنها به عنوان خروجی برگشت داده می‌شه:


int i = (1, 2, 3);
int j = (i += 1, i++);

و در مورد دستور شما، معادل زیر خواهد شد:


int a[3][3]={{1,8},6,5};

آرایه‌ها در C بصورت پشت‌سر هم در یک ردیف قرار می‌گیرد و حتی آرایه دو بعدی و چند بعدی و ... همه در یک ردیف قرار می‌گیرند، و شما خواستید که از سطر ۱ ستون ۱ را انتخاب کنید، در اینجا چون اعداد ۶ و ۵ درون { و } دوم قرار ندارند، پس هر دوی آنها به عنوان اعضای سطر ۱ در نظر گرفته می‌شوند و ستون ۱ از سطر ۱ برابر ۶ خواهد شد، به جای دستور بالا می‌توانستیم اینطور بنویسیم:


int a[3][3]={1,8,6,5};

یا


int a[3][3]={{1,8},{6,5}};

Sundown
پنج شنبه 17 تیر 1389, 23:12 عصر
int a[3][3]={1,8,6,5};

البته این جایگزینی که نوشتید یه مشکل داره
با توجه به گفته هاتون معادل دقیق کد من میشه



int a[3][3]={1,8,0,6,5,0,0,0,0};


به هرحال ممنون پاسخم رو گرفتم

PC2st
پنج شنبه 17 تیر 1389, 23:35 عصر
ممنون. درسته حواسم پرت بود، از بس که به هزار جا کله می‌زنم! :شیطان:
باید بعد از عدد 8 یک ضفر قرار می‌دادم چون در واقع ۳ در ۳ بود من اشتباهاً همه چیز را دو به دو گرفتم! آنهایی هم که مشخص نشدند بطور پیش‌فرض صفر می‌شوند.