注册 登录
编程论坛 C++教室

#pragma 函数的问题?

zcdjt 发布于 2014-10-07 21:13, 428 次点击
#include<iostream.h>
#pragma(8)
struct example1
{
  short a;
  long b;
}
struct example2
{
  char c;
  example1 struct1;
  short e;
}
#pragma pack()
int main(int argc,char *argv[])
{
 example2 struct2;
 cout<<sizeof(example1)<<endl;
 cout<<sizeof(example2)<<endl;
 cout<<(unsigned int)(&struct2.struct1)-(unsigned int)(&struct2)<<endl;
 return 0;
}
输出结果是:8,16,4
请问结果16,4怎样求出?
主函数括号中表示什么意思?
结构体中的变量a,b,c,e和结果有关系没?
4 回复
#2
wp2319572014-10-08 13:41
实测你的代码无法通过编译
#3
ClarenceC2014-10-08 15:48
这个涉及到边界对齐的问题,各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。自然对界(natural alignment)即默认对齐方式,是指按结构体的成员中size最大的成员对齐。
使用伪指令#pragma pack (n),编译器将按照n个字节对齐;使用伪指令#pragma pack (),取消自定义字节对齐方式。
具体请参考http://blog.
#4
zcdjt2014-10-10 13:34
知道了!
1