求值题疑问

来源:百度知道 编辑:UC知道 时间:2024/06/06 06:41:13
struct AB { long a1; long a2; }; struct ABC { char a, b; short c; long d; };
AB a = { 53213, 32542 }; ABC *pA = ( ABC* )&a;
char aa = pA->a, bb = pA->b, cc = pA->c; long dd = pA->d;
pA->a = 1; pA->b = 2; pA->c = 3; pA->d = 4;
long aa1 = a.a1, aa2 = a.a2;

结果 aa,bb,cc,dd 分别为 -35,-49,0,32542
aa1=197121,aa2=4

请教结果是如何得出的 其程序的运行思维是如何的....虚心求教.

这样的程序都写的出来..
分析起来有点复杂
当将AB强制转换成AB的时候,a1前2位会赋值给a,后两位给b,然后将a2和d对应。至于那些没有对应的自然就是0了。

下面的那个aa1就不分析了,其原理是一样的,将ABC中的前两位合到一起变成a1.

指针是个好东西,但是你要是这么用,就等着被炒鱿鱼,平时玩玩还可以..