x =(char*)&a的作用是什么?它有什么作用?

Aja*_*dav 0 c printf pointers char

我有这段代码:

int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n");
return 0;
Run Code Online (Sandbox Code Playgroud)

这打印513.请解释,尤其是第3行.

Lun*_*din 5

第3行简单地指向x地址a.作为C中的特殊规则,我们允许使用字符指针专门访问任何其他变量的单个字节.

进一步访问x将改变单个字节a,其方式取决于CPU的endianess.在小端机器上,512 = 0x200,其中两个最低有效字节分别具有值0x00和0x02.x[0] = 1;将最低字节更改为0x01,并将x[1] = 2;值0x02写入已包含0x02的字节.结果将是0x201 = 513十进制.

这里的问题是printf("%d\n");调用未定义的行为,因为它包含不正确数量的参数.

简介:代码是乱码,C语言没有定义这个程序会做什么.它可能会崩溃,打印任何值或根本不打印任何值.关于它为什么以某种方式表现的思考并不是有意义的实践.而是专注于学习如何避免未定义的行为错误.