PDA

View Full Version : سوال: خروجی قطعه کد زیر چیست؟



ms.nazeri
سه شنبه 10 خرداد 1390, 22:31 عصر
خروجی قطعه کد زیر چیست؟چرا؟
و لطفا توضیح بدین که خط 3و 4 چه مقادیری به خود میگیره؟

{
char str[4];
int a=1;
for (int i=0;i<0x4;i++) str[i]=i;
a=*((int*)&str[1]); a++;
cout<<a;
}

shahmohammadi
چهارشنبه 11 خرداد 1390, 21:54 عصر
با سلام.
برنامه ی نکته داریه. برای درک بهتره خروجیش دستور خروجی رو به این صورت بنویسین:
cout<<hex<<a;
اینطوری هر دوتا رقم از راست به چپ یه بایت رو نشون می دن.

str[1] یه متغیر از نوع کاراکتره. &str[1] آدرس این متغیر رو نشون می ده منتها آدرسی که از نوع char * هست. پس با (int*) تبدیل صریحش می کنیم به آدرسی به یک متغیر اینتجر. حالا اون ستاره آخری هم برای دسترسی به محتویات این اشاره گر ساختگی اینتجر هست. که مقدار صحیح ساختگی رو به متغیر a میده. این کد مقدار دوبایت از اون آدرس رو در متغیر آ قرار می ده.
با توجه به اینکه:str[1]==1;str[2]==2;
و این دوتا بایت دو بایت از آ هستند پس a برابر است با 0201 البته در مبنای هگزا.
نکته ای که داره اینجاست که اعداد در کامپیوتر و خصوصا در زبان سی بایت هاشون معکوس ذخیره می شه.
موفق باشین.