问答题 指针进行强制类型转换后与地址进行加法运算,结果是什么
【正确答案】
【答案解析】假设在32位机器上,在对齐为4的情况下,sizeof(long)的结果为4字节,sizeof(char*)的结果为4字节,sizeof(short int)的结果与sizeofl[short)的结果都为2字节,sizeof(char)的结果为1字节,sizeof(int)的结果为4字节,由于32位机器上是4字节对齐,以如下结构体为例:
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
当p=0x1000000;则p+0x200=?(Ulong)p+0x200=?(char*)p+0x200=?
其实,在32位机器下,sizeof(struct BBB)=sizeof(*p)=4+4+2+1+1/*补齐*/+2*5+2/*补齐*/=24字节,而p=0x1000000,那么p+0x200=0x1000000+0x200*24指针加法,加出来的是指针类型的字节长度的整倍数,就是p偏移sizeof(p)*0x200。
(Ulong)p+0x200=0x1000000+0x200经过Ulong后,已经不再是指针加法,而变成一个数值加法了。
(char*)p+0x200=0x1000000+0x200*sizeof(char)结果类型是char*。