خروجی قطعه کد زیر چیست؟چرا؟
و لطفا توضیح بدین که خط 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;
}
خروجی قطعه کد زیر چیست؟چرا؟
و لطفا توضیح بدین که خط 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;
}
با سلام.
برنامه ی نکته داریه. برای درک بهتره خروجیش دستور خروجی رو به این صورت بنویسین:
cout<<hex<<a;
اینطوری هر دوتا رقم از راست به چپ یه بایت رو نشون می دن.
str[1] یه متغیر از نوع کاراکتره. &str[1] آدرس این متغیر رو نشون می ده منتها آدرسی که از نوع char * هست. پس با (int*) تبدیل صریحش می کنیم به آدرسی به یک متغیر اینتجر. حالا اون ستاره آخری هم برای دسترسی به محتویات این اشاره گر ساختگی اینتجر هست. که مقدار صحیح ساختگی رو به متغیر a میده. این کد مقدار دوبایت از اون آدرس رو در متغیر آ قرار می ده.
با توجه به اینکه:str[1]==1;str[2]==2;
و این دوتا بایت دو بایت از آ هستند پس a برابر است با 0201 البته در مبنای هگزا.
نکته ای که داره اینجاست که اعداد در کامپیوتر و خصوصا در زبان سی بایت هاشون معکوس ذخیره می شه.
موفق باشین.