c语言共同体问题!

来源:百度知道 编辑:UC知道 时间:2024/05/26 03:45:18
union U { int u1; int *u2;} u;
int *p;
u.u1 = 10;
p = u.u2;
*p = 0;
运行的时候有错??错在哪里????
编译没有,运行时内存读写的错误!!,仿佛是最后一句有问题,请指点!

p是非法地址,共同体和结构不一样。union所占的内存空间等于它的所有成员中最“大”的一个所占的空间。这个空间是共用的,你改了u1,u2也会变,因为实际上它们就是一个地址,此时的sizeof(u)是4。如果把union改成struct,这时的sizeof(u)就是8,u1和u2也互不干扰了。
u.u1=10,此时u2就是0x0A,这个肯定是非法地址,所以当运行到*p=0就会出错。如果把*p=0注释掉还是可以正常运行的。

共同体各成员在某一时刻只有一个成员有效,而u.u1 = 10;使得u1有效,也就是说共同体里现在只有一个整形变量,而不是整形指针,这时候运行p = u.u2;就相当于把一个整形值赋给指针就会出错。你的错误提示应该就是
错误的赋值:不能将int赋给 int *

.....很 你运行时 错误提示里没有说在哪行吗
C我还没看这么深 也就会些 循环语句
等楼下