ايران ويج

نسخه‌ی کامل: اشاره گر
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
تو اين كد من ادرس s رو گرفتم و مي خوام چاپ كنم مي نويسه -36 مگه ادرس مي تونه منفي باشه

int main()
{
int *a,s,;
s = 1;
a = &s;

printf("%d",a);

}
آدرس همیشه باید از نوع unsigned تعریف بشه ! تعجب نکن که CPU تفاوت اعداد منفی و مثبت رو تشخیص نمیده !! در واقع این برنامه نویس هست که مشخص می کنه از بیت علامت باید استفاده بشه یا نشه ! اعداد unsigned دارای بیت علامت نیستند و اون بیت علامت به عنوان قسمتی از داده باینری محسوب میشه ! شما که متغیر اشاره گرت رو از نوع int تعریف کردی در واقع بطور پیش فرض علامت دار یا signed در نظر گرفته میشه . موقع چاپ هم میخوای که به عنوان یک عدد علامتدار باهاش برخورد بشه و اینه که بیت علامت رو کامپایلر در نظر میگیره و ممکنه در صورت 1 بودن اون بیت ، باهاش مثل یک عدد منفی برخورد کنه  و عددی منفی برات چاپ بشه .

من همین برنامه رو چک کردم ولی در هر دوحالت ( علامتدار و بی علامت ) عددی مثبت و مشابه دریافت کردم . علتش این بود که بیت آخر در دو حالت 0 بود و در نتیجه تغییری در جواب حاصل نمیشد ولی توی سیستم شما وضعیت میتونه فرق بکنه . میتونه اونجا متغیر در آدرسی قرار بگیره که بیت علامت هم بخواد 1 بشه . اون وقته که جواب ها فرق خواهد کرد !