首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于sizeof(struct .) 的疑问,该怎么解决

2012-05-05 
关于sizeof(struct ...) 的疑问typedef struct _node{char name[10]int age} *Nodeint main(){printf(

关于sizeof(struct ...) 的疑问
typedef struct _node
{
  char name[10];
  int age;

} *Node;

int main()
{
  printf("sizeof(struct _node):%d\n",sizeof(struct _node)); //输出16,为什么不是 14?
  return 0;
}

[解决办法]
确实是16,这就涉及到结构体对齐的问题了。结构涉及到一个对齐量的问题,对齐量就是结构体中最大的数据类型的长度,int为4个自己,所以这个结构体定义的变量要从能被4整除的地址开始,int age也要从能被四整除的地址开始,于是在age之前就有两个字节的空余了。
[解决办法]
http://topic.csdn.net/u/20120326/18/356acf52-3fa8-4d68-8dff-b72c0da035c6.html
[解决办法]
如果要跨平台的话可以用手动填充,
比如:

C/C++ code
typedef struct _node{  char name[10];  char pad1;    //填充一个字节  short pad2;   //填充两个字节  int age;} *Node;
[解决办法]
内存对齐,对齐参数为4呀,偏移地址需要可以整除4,所以就是16了
#pragma pack(1) 就是14了
[解决办法]
探讨

如果要跨平台的话可以用手动填充,
比如:
C/C++ code

typedef struct _node
{
char name[10];
char pad1; //填充一个字节
short pad2; //填充两个字节
int age;

} *Node;

热点排行
Bad Request.