小弟在这请问几个小问题啊等,多谢

小弟在这请教几个问题啊,急等,谢谢啊
struct   tagABC
{
            char   cB;
            short   sC;
            char   cD;
            long   lA;
}*pAbc;
pAbc=0x100000
pAbc+0x100=0x__   ?       (ULONG)pAbc+0x100=0x__   ?       (ULONG*)pAbc+0x100=0x__   ?
(char*)pAbc+0x100=0x___?

------解决方案--------------------
自己上机看看不就知道了?这么好实现,要自己做啊。
------解决方案--------------------
是内存对齐问题吧:
第一个char占一个字节,但由于下一个short占两个字节,需要按2字节对齐,所以其实第一个char后面会填充一个空字节。
所以:
char cB;
short sC;一共占四个字节

同样,接下来的是一个char占一个字节,但是后面Long是按4字节对齐,需要填充3个空字节在char后面。
char cD;
long lA;//一共占8个字节

所以sizeof(tagABC)=12;

pAbc+0x100= 0x100000 + 0x100*sizeof(tagABC) //sizeof(tagABC)=12
(ULONG)pAbc+0x100= 0x100000 + 0x100*sizeof(ULONG) //sizeof(ULONG)=4(视机器而定)
(ULONG*)pAbc+0x100= 0x100000 + 0x100*sizeof(ULONG*) //sizeof(ULONG*)=4
(char*)pAbc+0x100= 0x100000 + 0x100*sizeof(char*) //sizeof(char*)=4
------解决方案--------------------
怎么算结果都一样。
如果按十六进制乘所有数就都转成16进制后再相乘:
0x100*sizeof(tagABC) = 0x100*0xC = 0xC00;
0x100000+0xC00 = 0x100C00;

如果转成10进制相乘:
0x100*sizeof(tagABC)=256*12 =3072;
0x100000+3072 = 1048576+3072=1051648;