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

结构体变量空间分配有关问题

2012-09-27 
结构体变量空间分配问题案例:#include stdio.h#include stdlib.hstruct s{char a[3]char b[4]}int

结构体变量空间分配问题
案例:
#include <stdio.h>
#include <stdlib.h>

struct s
{
  char a[3];
  char b[4];
};

int main()
{
  struct s ST;
  memset (&ST, 0, sizeof(ST));

  printf("&ST.a=[%x]\n", &ST.a);
  printf("&ST.b=[%x]\n", &ST.b);

  char str[] = "1234567";
  memcpy(&ST, str, sizeof(ST));

  return 0;
}


问题:
1. 定义了结构体变量ST,系统是如何给他分配空间的?
2. 结构体的成员变量的地址空间是否连续的?
3. 一般情况是连续的,但是我好像记得有时候是连续的,想确定下;
4. 如果不是连续的,memcpy(&ST, str, sizeof(ST));这样赋值应该就有问题了,
  还是说就算空间不是连续的,ST.a值是123,ST.b值是4567?


[解决办法]
为了对齐,会插入一些无用的空间
[解决办法]
struct s
{
char a[3];
char b[4];
};

一般会有对齐,如果是四字节对齐的话,a[3]后面会插入一个字节的无用空间,然后是b[4];
[解决办法]
将申明放在下面,可以以一字节对齐:

C/C++ code
#pragma pack(push, 1)typedef struct _XX{...;...;}XX; 

热点排行