【发布时间】:2014-07-16 07:27:09
【问题描述】:
struct s{
int a;
char c;
};
int main()
{
struct s b = {5,'a'};
char *p =(char *)&b;
*p = 45;
printf("%d " , b.a);
return 0;
}
如果 *p 更改为任何 character ,则打印 ASCII 的字符值,如果 *p 更改为任何 string ("xyz") ,则打印 36 。为什么会这样?
你能给出结构 s 和 *p 的内存映射吗?
据我所知,结构体
s as z-> (****)(*) assuming 4 byte for int . 并且当 s 初始化时,它会变成 (0000000 00000000 00000000 00000101)(ASCII OF char a) 并且 *p 指向 z 的起始地址。并且 *p 是一个字符指针,因此它将在每个 BYTE 位置存储 ASCII 值,即每个 * 将被 char 的 ASCII 占用。但现在我们将其设为 45,因此 z 将变为 (45 0 0 5 )(ASCII of char a) 。但这不是真的,为什么?
【问题讨论】:
-
@πάνταῥεῖ 更具体..
-
顺便说一句:这也取决于您使用的是小端还是大端。
-
问题的重点是为什么当您使用 *p = 45 写入 char 时似乎会写入整个 int 吗?
-
string("foo")肯定不是 C。 -
@Jarod42 它只适用于小端,在大端输出将是 754 974 725
标签: c pointers compiler-construction char