بله این تبدیل قابل انجام هست و کامپایل و اجرا هم میشه منتها با همون تغییر int *sp
به short int *sp
. برای این تبدیل حداقل دو حالت زیر وجود داره
#include <iostream>
using namespace std;
int main()
{
int *pi;
short int i;
void *vi = &i;
pi = (int *)vi;
cout<<*pi;
return 0;
}
یا
#include <iostream>
using namespace std;
int main()
{
int *pi;
short int i;
short int *si = &i;
pi = (int *)(sp);
cout<<*pi;
return 0;
}
اطلاعات در اینجا هم تغییر میکنه. تغییر اشارهگر از انواع مختلف به همدیگه وجود داره. مثلاً صحیح به اعشاری یا برعکس.
در صورتی که اشارهگر یک عدد صحیح به عدد صحیح کوچکتر تبدیل بشه بایتهای ابتدایی مورد اشاره در مقدار محاسبه میشه.
مثلاً فرض کنیم اشارهگر int*
به بایت ۱۰۰ حافظه اشاره کنه. بنابراین در محاسبهی مقدار بایتهای ۱۰۰ و ۱۰۱ و ۱۰۲ و ۱۰۳ مورد استفاده هستند. حالا اگه اشارهگر به short int*
تبدیل بشه اون وقت در محاسبه بایتهای ۱۰۰ و ۱۰۱ محاسبه میشن. (در صورتی که int
۴ بایتی و short int
۲ بایتی باشه).
در صورتی که اشارهگر یک عدد صحیح به عدد صحیح بزرگتر تبدیل بشه بایتهای اضافی از انتهای بایتهای عدد در محاسبهی مقدار مورد استفاده قرار میگیره.
در صورتی که تغییر اشارهگر از بدون علامت به علامتدار یا برعکس انجام بشه، تفسیر بیتهای عدد تغییر میکنه نه بایتهای مورد استفاده.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)