اشاره گرها در زبان c

سلام استاد بهبویی وقت بخیر
چرا در برنامه زیر مقدار 32 بیت حافظه را تایپ کست کردیم به 16 بیت ، در خروجی همون 32 بیت را بهمون داد و 16 بیت نشد؟

Uint16_t* pvalue=( Uint16_t*)0xFFFF0000;
Pvalue++;

Printf(" value=%p\n ", Pvalue);

Value=0xffff0002

1 پسندیده

سلام، وقت بخیر
ببینید در میکروکنترلر stm32 تمامی آدرس ها 32 بیتی هستند و این به خاطر معماری 32 بیتی این میکروکنترلر هست. در واقع ما هر زمانی که پوینتر داشته باشیم، خود اون پوینتر در هر حالتی 32 بیتی هستش و این هیچ ارتباطی به این نداره که پوینتر در حال اشاره به متغیر 8 یا 16 یا 32 یا 64 بیتی باشه. حالا زمانی که مثل این سوال پوینتر ما به یک متغیر 16 بیتی اشاره میکنه در واقع این به کامپایلر میگه که هر موقع خواستی مقداری که این پویتر به اون اشاره میکنه رو بخونی باید 16 بیت یا دو بایت بخونی. حالا وقتی ما این پوینتر رو یک واحد اضافه میکنیم این پوینتر باید یه 16 بایت جلوتر از چیزی که هست اشاره کنه و به همین دلیل هستش که مقدار خود پوینتر دو واحد زیاد میشه.

1 پسندیده