关于sizeof

来源:互联网 发布:java nio包 编辑:程序博客网 时间:2024/05/28 04:52
 

程序:

 

#include<stdio.h>
int main()
{
 char a = 100;
 int i = sizeof(a = (a + 155));
 printf("%d, %d\n", i, a);//输出结果的a值为什么是100,而不是255?
 return 0;
}

输出结果是: 1, 100

 

a = 100;

a是char类型,a=100就是这个char的asic码值是100,就好像 char a='0',其实就是 char a=48 . 关于 sizeof  ,c标准中规定sizeof运算符值计算类型大小, 也就是是说a=(a+155)的类型是char, 已经明确, 不会去计算值。 切记sizeof是运算符不是函数

 

i = 1;

表示char占一个字节

具体参考:http://topic.csdn.net/u/20110715/11/599494a2-8112-422d-ba18-37217dd44d17.html

=======================================================================

关于sizeof的运算:

sizeof的总结:
  基本类型:
   sizeof(bool)=1;
   sizeof(char)=1;
   sizeof(short)=2;
   sizeof(long)=4;
   sizeof(int)=4;
   sizeof(float)=4;
   sizeof(double)=8;
   sizeof(string)=16;
   sizeof(vector<elemType>)=16;
  元素类型为T,个数为n的数组array:
  sizeof(array)=n*sizeof(T);
  
  指针和引用:
   sizeof作用于指针变量时,结果总是为4,而作用于引用变量时,结果等于所引用的变量的size。如:
  double a; double* b=&a; double& c=a;
  则sizeof(b)=4;sizeof(c)=8。
  类:
  1)无父类的类 : 其size原则上等于其非静态成员变量的size之和:
  class CTest1{
   public:
   int a,b
   static double c;
   double d;
  };
  sizeof(CTest1)=sizeof(a)+sizeof(b) +sizeof(d)=4+4+8=16;
  为什么说原则上等于呢?因为变量只能在内存中一个字的开头存储,所以定义成员变量的顺序可能会影响到类的size,如将上面的CTest1改为
  class CTest2{
   public:
   int a;
   static double c;
   double d;
   int b;
  };
  sizeof(CTest2)=24; 可以看出类中成员变量的定义顺序会影响到内存的利用率,这是跟编译器的对齐方式有关。
  2)派生类:需要加上其基类的size
  class CTest3:CTest1{
  public:
   int e;
  }; sizeof(CTest3)=24
  3)class CTest4{}; //sizeof(CTest4)=1
   class CTest5{virtual ~CTest5(){}};//sizeof(CTest5)=4

具体参考:http://blog.csdn.net/max_cpp/article/details/4268991

原创粉丝点击