`
dogasshole
  • 浏览: 843723 次
文章分类
社区版块
存档分类
最新评论

面试常考struct中对齐的问题(liumangxiong于2006-05-03)

 
阅读更多

下面所讲的例子的调试环境是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来看看。哈哈,又吃惊了吧,知道为什么吗?

分享到:
评论

相关推荐

    mapstruct-processor-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-processor-1.2.0.Final.jar; 赠送原API文档:mapstruct-processor-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-processor-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct...

    mapstruct-1.3.1.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...

    mapstruct-processor-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-processor-1.2.0.Final.jar; 赠送原API文档:mapstruct-processor-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-processor-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct...

    mapstruct-1.1.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...

    mapstruct-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...

    mapstruct-1.3.1.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...

    mapstruct-1.1.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...

    mapstruct-jdk8-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    mapstruct-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...

    ref-struct

    var StructType = require('ref-struct') // define the time types var time_t = ref.types.long var suseconds_t = ref.types.long // define the "timeval" struct type var timeval = StructType({ tv_sec: ...

    mapstruct-jdk8-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    mapstruct-1.0.0.Final.jar

    mapstruct-1.0.0.Final.jarmapstruct-1.0.0.Final.jar

    mapstruct-1.1.0.Final.jar

    mapstruct-1.1.0.Final.jarmapstruct-1.1.0.Final.jar

    rust-demo-enum-struct-mod-pub-super-crate-if-match-20210518.txt

    关于enum、mod、struct、match、方法、函数相关的demo 源码已经在如下博客中开源: https://blog.csdn.net/yujianliam/article/details/116992163

    Struct和运算符重载---详细

    详细介绍Struct和运算符的重载,详细见代码

    解析C语言中结构体struct的对齐问题

    3.数据类型的有效对齐值:默认对齐值和指定对齐值中小的那个值。 有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据存放地址方式的值,最重要。有效对齐N...

    Data_struct_2.rar_L-edit

    ◆2.11② 设顺序表L中的数据元素递增有序。 试写一算法,将x插入到L的适当位置上,并保 持该表的有序性。 要求实现下列函数: void InsertOrderList(SqList &L, ElemType x) 顺序表类型定义如下: typedef struct...

    golang struct 自动生成工具

    https://github.com/whr-helen/go-struct-auto 自动构建工具使用 安装包命令:go get github.com/whr-helen/go-struct-auto 注释:参数信息 -host host改为自己数据库的地址(默认127.0.0.1) -port port改为...

    pack-struct.md

    # 改变结构体成员的字节对齐 ## 例子 #include typedef struct { char a; int b; } ST_A;

Global site tag (gtag.js) - Google Analytics