面试常考struct中对齐的问题(liumangxiong于2006-05-03)
2006-05-03 21:50
274 查看
下面所讲的例子的调试环境是winXp+VC6.0
int main(int argc, char* argv[])
{
typedef struct{char a:7;char b:1;char c;} schar;
typedef struct{char a:7;char b:1;short c;} sshort;
typedef struct{char a:7;char b:1;long c;} slong;
//unsigned short a[4]={0x1234,0x5678};
//unsigned long a[4]={0x01234567,0x89abcdef};
unsigned char a[8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};//把0x01分别换成0x80,0x81,0x70,0x71来看看
schar* s1 = (schar *)a;
sshort* s2 = (sshort*)a;
slong* s3 = (slong*)a;
printf("/n%i/t%i/t%i/n", sizeof(schar), sizeof(sshort), sizeof(slong));
printf("/n%x/t%x/t%x/t", s1->a,s1->b,s1->c);
printf("/n%x/t%x/t%x/t", s2->a,s2->b,s2->c);
printf("/n%x/t%x/t%x/t", s3->a,s3->b,s3->c);
return 0;
}
输出结果是什么呢?
2 4 8
1 0 23
1 0 6745
1 0 efcdab89
哈哈,知道为什么吗?
意外收获:
1、把数组a[4]的类型分别换成上面注释掉的其他类型的,看看结果有什么不同。这就是大端法和小端法的不同了。可以参考我的文章:http://blog.csdn.net/liumangxiong/articles/674935.aspx
2、也是我上面有注释的部分,把0x01分别换成0x80,0x81,0x70,0x71来看看。哈哈,又吃惊了吧,知道为什么吗?
int main(int argc, char* argv[])
{
typedef struct{char a:7;char b:1;char c;} schar;
typedef struct{char a:7;char b:1;short c;} sshort;
typedef struct{char a:7;char b:1;long c;} slong;
//unsigned short a[4]={0x1234,0x5678};
//unsigned long a[4]={0x01234567,0x89abcdef};
unsigned char a[8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};//把0x01分别换成0x80,0x81,0x70,0x71来看看
schar* s1 = (schar *)a;
sshort* s2 = (sshort*)a;
slong* s3 = (slong*)a;
printf("/n%i/t%i/t%i/n", sizeof(schar), sizeof(sshort), sizeof(slong));
printf("/n%x/t%x/t%x/t", s1->a,s1->b,s1->c);
printf("/n%x/t%x/t%x/t", s2->a,s2->b,s2->c);
printf("/n%x/t%x/t%x/t", s3->a,s3->b,s3->c);
return 0;
}
输出结果是什么呢?
2 4 8
1 0 23
1 0 6745
1 0 efcdab89
哈哈,知道为什么吗?
意外收获:
1、把数组a[4]的类型分别换成上面注释掉的其他类型的,看看结果有什么不同。这就是大端法和小端法的不同了。可以参考我的文章:http://blog.csdn.net/liumangxiong/articles/674935.aspx
2、也是我上面有注释的部分,把0x01分别换成0x80,0x81,0x70,0x71来看看。哈哈,又吃惊了吧,知道为什么吗?
相关文章推荐
- struct字节对齐的问题,找工作笔试面试很喜欢考!!!!!
- C/C++中关于struct内存对齐问题
- 结构体struct的对齐问题
- 关于struct和union存储的内存字节对齐的问题
- struct对齐问题
- 关于移植arm程序到x86遇到的struct对齐问题
- struct与union字节对齐问题
- struct的成员对齐问题
- 解析C语言中结构体struct的对齐问题
- [面试] 结构体占用空间的问题,内存对齐~! 真的懂了,cpu取加快速度,省空间来考虑。
- Struct 中字节对齐问题
- struct/class等内存字节对齐问题详解
- struct、union的对齐问题
- Linux下struct的成员对齐问题-结构体实际大小
- [C/C++基础知识] 面试再谈struct和union大小问题
- sizeof(struct)--关于字节对齐的问题
- gcc 中结构体(struct)内存对齐问题分析
- [面试] 结构体占用空间的问题,内存对齐~! 真的懂了,cpu取加快速度,省空间来考虑。
- C的struct内存对齐的问题
- struct 中字节对齐问题