阿里笔试题

1.sizeof(A) =22

   对于类A而言,

   int i ;//占用4个字节

   U ;//占用13个字节

   void foo();//函数声明,不占用内存

  typedef char*(*f)(void*);//函数声明,不占用内存

  enum  ;//枚举类型,占用4个字节

(虽然枚举类型需要偏移量为4的倍数,由于人为定义了内存对齐大小为2字节,所以偏移量需要为2的倍数

 所以U之后需要增加1个字节,4+13+1+4=22个字节)

如果不定义#pragma pack(2),则sizeof(A)=4+13+3+4=24个字节

 

 

 

 

#pragma pack(2)
class A
{
    int i;
    union U
    {
        char buff[13];
        int i;
    }u;
    void foo() {    }
    typedef char* (*f)(void*);
    enum{red, green, blue} color;
}a;

关于枚举类型为什么是4个字节的问题:

这只是定义变量类型而已,和定义一个结构体类型一样,并不会实际分配内存。
printf("%d\n",sizeof(DIRECT));则是输出变量类型为DIRECT的存储空间。

枚举类型在c语言中自动按照Int类型大小进行存储,所以可以看到sizeof(DIRECT) =4.

typedef enum{ 
        UP, 
        DOWN, 
        RIGHT, 
        LEFT 
}DIRECT; 

 

 

 

 

 

 

http://blog.csdn.net/hackbuteer1/article/details/6902917

http://blog.csdn.net/hackbuteer1/article/details/7450250

http://blog.sina.com.cn/s/blog_5e3455e70100uib9.html

转载于:https://www.cnblogs.com/limera/p/5389021.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值