C题库1

这篇博客探讨了C语言中的数据类型、字节对齐原则及其影响,包括VC6环境下32位系统的实例分析。讲解了字节序在网络通信中的作用,并给出了一些相关问题的解答,涉及大端和小端存储模式。最后讨论了变量赋值和初始化的注意事项,强调了避免全局变量和局部变量重名的重要性。
摘要由CSDN通过智能技术生成

数据类型、字节对齐

1.在VC6,32位X86系统下,有下列程序:

#include <stdio.h>
void main()
{
	union
	{
		int k;
		char i[2];
	}*s, a;
	s = &a;
	s->i[0] = 0x39;
	s->i[1] = 0x38;
	printf("%x\n", a.k);
}

输出结果是()a.3839 b.3938 c.380039 d.以上答案都不正确

答案:如果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了

补充:字节序可以参考《c/c++随笔》字节序一节:所谓大字节序就是高位在低字节,低位在高字节;小字节序则反之。简记为“低位为低字节的是小字节序,低位是高字节的是大字节序”。

2.

	UC
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值