易截截图软件、单文件、免安装、纯绿色、仅160KB

C编程问题请教

比较下面两个结构体alpha和beta:
struct
{
  char a:2;
  char b:3;
}alpha;
struct
{
  char a:2;
  int b:3;
}beta;
这两个结构体占用的内存大小分别是alpha->1个字节,beta->8个字节!
这是为什么,还望各位指点一下!感激不尽!
第一个貌似很容易理解,就是2+3 <8 bits 而且都是char声明的,所以1个字节
第二个由于int出来了,int32需要占4个字节,而且机器可能要求int对齐,所以char一个字节后空了三个字节,来使得int对齐,总共char1+空3+int4=8bytes

字节对齐有四个重要的概念:
1.数据类型自身的对齐值:
对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。



在我的gcc上第二个是共4字节,这样子就是int和char共用一个int空间。这点也说明了位域的不可移植性。这个东西现在也用的特别少了

这个要看具体编译器……
请参考
http://topic.csdn.net/u/20100101/21/013dd2e5-26d7-41c2-acf8-a9d0b14783ad.html

http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx

你是用VC吧,主要原因是内存对齐一起的,参考我以前写的这几条。

主要原因是原则1跟原则3,导致beta的size为8.

首先,int数据要从第5个元素开始。
然后由于int占4字节,所


相关问答:

向高手请教fortran 调用C 的问题

我现在要些一个fortran调用C接口的问题,但是不知道 C语言里面分配的指针怎么付给fortran,又不能在fortran立马先分配好,业务上不允许。
我写了个测试的例子。但是不行。
test.c
#include <stdio.h>
#incl ......

VFP如何调用C函数 - 其他数据库开发 / VFP

请问VFP中如何调用C/C++函数?

你要调用什么功能的函数?要看看VFP中有没有对应的函数,如果有就省着再调用了。如果没有,可以将C/C++函数写个DLL或FLL,然后在VFP调用即可。

十豆三 老师,怎么才能修改自己的 ......

C/C++里屏shift+f10键要怎么写! - C/C++ / C++ 语言

SHIFT加F10与那个键右ctrl边上的那个键功能一样,想屏这个
但不知要怎么写那个组合键!
有没哪个大侠放一段这个的代码或写一段
http://topic.csdn.net/u/20090609/15/7dc9fb70-243f-4070-9cfd-34e48b66e6c6.html ......

关于c:forEach迭代标签的问题

本人在项目中,用ssh架构,想做成分页的效果.
以前我在页面中是,这样取得数据的
<!--进行循环遍历数据-->
<!--进行循环遍历数据-->
<%
List<Users> lof = (List) request.getAttri ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号