C++ Class and Struct distinction

1. Struct 的默认成员权限是 Public,而Class的默认成员权限是Private.

2. Struct 可以在定义的时候,直接以{}对成员变量赋初值,而Class不可以。

struct structA

{

    char a;

    char b;

    int c;

};

structA  a = {'a', 'a', 1};

 

struct的成员对齐问题:

#include <iostream.h>

#pragma pack(n) //定义编译器字节对齐方式 , n大于最大成员的size时 则不起作用,仍然按自然对齐方式编译

struct example1

{

   short a;

   long b;

};

struct example2

{

   char c;

   example 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

分析:

   默认情况下,编译器为结构体的每个成员按其自然条件分配空间,各成员按声明顺序存储,第一个成员的地址和整个结构

体的地址相同。(默认对齐是指按结构体中size最大的成员对齐

long ---4

int    ---4

short---2

 

a =>11- -

b =>1111

     8

c =>1- - -

a =>11- -

b =>1111

e =>11- -

     16

struct2中c占4字节,故地址长度为:4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值