c语言的这题看不懂,{int k char i[2];}*s,a; s=&a; s->i[0]=0x39;s->i[1]=0x38; printf("%x\n",s->k); c语言的这题看不懂,{int k char i[2];}*s...

c\u8bed\u8a00\u7684\u8fd9\u9898\u770b\u4e0d\u61c2\uff0c{int k char i[2];}*s,a; s=&a; s->i[0]=0x39;s->i[1]=0x38; printf("%x\n",s->k);

int k\u540e\u9762\u5e94\u8be5\u6709\u5206\u53f7\u5427\uff0c\u5927\u6982\u610f\u601d\u662f\uff1a\u5b9a\u4e49\u4e86\u4e00\u4e2a\u542b\u4e00\u4e2a\u6574\u6570\u548c\u4e00\u4e2a\u5b57\u7b26\u6570\u7ec4\u7684\u7ed3\u6784\u7684\u6307\u9488\u548c\u5b9e\u4f53\uff0c\u7136\u540e\u6307\u9488\u6307\u5411\u8fd9\u4e2a\u5b9e\u4f53\uff0c\u901a\u8fc7\u8fd9\u4e2a\u6307\u9488\u7ed9\u5b57\u7b26\u6570\u7ec4\u8d4b\u503c\uff0c\u6700\u540e\u6253\u5370k\u503c\uff08\u8fd9\u6bb5\u7a0b\u5e8f\u4e5f\u6ca1\u6709\u7ed9k\u8d4b\u503c\uff09\u3002

\u5f00\u59cb\u8fd8\u4ee5\u4e3a\u662f\u7528struct, \u4ed4\u7ec6\u770b\u770b\u539f\u6765\u662funion.

union
{
int k;
char i[2];}
*s,a;
// \u5b9a\u4e49\u4e86\u4e00\u4e2aunion\u7684\u683c\u5f0f\uff0c
\u5185\u5bb9\u662f\u4e00\u4e2a\u6574\u6570\u548c\u4e00\u4e2a\u957f\u5ea6\u4e3a2\u7684\u5b57\u7b26\u4e32\u3002
\u95ee\u9898\u662fVC\u91cc\u9762int \u90fd\u662f 4\u5b57\u8282\u7684\u4e86\uff0c\u8fd9\u6837\u7528\u4e0d\u5408\u7406\u3002
\u6700\u597d\u6539\u4e3ashort
union
{
short k;
char i[2];
}*s,a;


s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->k);
\u5982\u679c\u662f\u7ed3\u6784\uff0c\u90a3\u4e48s->k\u662f\u6ca1\u6709\u8d4b\u503c\u7684\uff0c\u53ef\u80fd\u663e\u793a\u4efb\u610f\u503c\u3002
\u5982\u679c\u662funion,\u5c31\u5408\u7406\u4e86\u3002\u56e0\u4e3ashort\u548cchar[2]\u5171\u4eab\u5185\u5b58\u7a7a\u95f4\uff0c
\u6839\u636eshort\u5b58\u50a8\u5148\u4f4e\u540e\u9ad8\u7684\u539f\u7406\uff0c \u4f1a\u663e\u793a 3839

看题的意思应该是
union{
int k;
char i[2];
}*s,a;
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->k);
这样吧?应该是考核共用体的,不是结构体。
如果int是4字节的话打印出来应该是0xcccc3839.看样子应该是VC平台。
共用体里里面定义的成员共用相同的存储空间,空间大小按照成员中最大的空间分配。
所以k和i[2]共用一块4字节内存,Win32下低字节在前,所以在内存顺序是
k0 k1 k2 k3,但这4个字节又与i[2]共用,即k0与i[0]共用,k1与i[1]共用,
所以i[0]=0x39,i[1]=0x38后同时给k0,k1赋值了。
由于VC调试态下默认将内存空间初始化为0xcc/0xcd,所以会k2=0xcc,k3=0xcc
打印出来k就是k3 k2 k1 k0 就是0xcccc3839了

给你一个清晰的版本吧
struct
{
int k ;
char i[2];
}*s,a;
void main()
{
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->i[0]);(你那里是K)
}
就是定义了一个结构体指针s和一个结构体a
s=&a就是s指向了结构体a;
然后把16进制的39,38分别赋给了字符数组i[2]的2个元素,
最后打印出i[0]的值!
OK!
谢谢,请采纳!

感觉语法有问题

扩展阅读:扫一扫题目出答案 ... c++编程 ... c++为什么用不了int ... c语言必背100代码 ... int main 为什么出错 ... c语言中main前面要加int吗 ... c语言基础知识入门 ... c语言符号大全表解释 ... c++不支持int怎么办 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网