32 64位类型占字节,还有strlen,sizeof,length的小回顾

来源:互联网 发布:ai软件下载最新版 编辑:程序博客网 时间:2024/06/06 03:11

先说下占用大小的问题,不同的平台上对不同数据类型分配的字节数是不同的。

理论上来讲 数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算)。

通过sizeof可以去测来得出。其实就是char*对应与一个指针的大小,会有变化,int之类的一般不变化。

32位编译器:

      char :1个字节 
      char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) 
      short int : 2个字节 
      int:  4个字节 
      unsigned int : 4个字节 
      float:  4个字节 
      double:   8个字节 
      long:   4个字节 
      long long:  8个字节 
      unsigned long:  4个字节 

64位编译器:

      char :1个字节 
      char*(即指针变量): 8个字节 
      short int : 2个字节 
      int:  4个字节 
      unsigned int : 4个字节 
      float:  4个字节 
      double:   8个字节 
      long:   8个字节 
      long long:  8个字节 
      unsigned long:  8个字节 

下面就是说一下strlen,sizeof,length这几个问题:

str.length()和str.size()是用于求string类对象的成员函数,strlen(str)是用于求字符数组的长度,其参数是char*,两种对于一个正常思路的字串的统计返回是一样的。

sizeof():判断数据类型长度符。如sizeof(int)或者sizeof(i)(/i是int类型的),结果都会是一个int类型的长度(1个字长),以字节为单位,32位的系统int就是4。
注意:除了数组的名字用来做参数是数组的长度之外,其他的,不管是什么指针什么类型,都是那个变量的长度。
比如sizeof(cr1)/sizeof(&cr1),就是10,意思就是这个数组类型的长度(不管里面有什么个字符)。
如果是char * cp=cr1;siztof(cp);意思就是这个指针类型长度是多少。如果是sizeof(str1),那么就是string类型的长度,string是8个字长。
strlen():求的是char字符串的实际长度(string要转成char),它求得方法是从开始到遇到第一个'\0'(不包括'\0'),strlen(cr1),结果就是3。
string.length:返回实例中 Char 对象的个数。

而对于strlen,有几点,第一是是计数时遇到\0就会停下,不计入\0的位数,所以对于像char str0[8]={'a','b','c','d','e','f','i','g'};

这样的,结果会是未知。而char str1[]="abcdefig";这样的声明则会是准确的:8,因为声明会自己在最后加一个\0.

另外一些例子可以看一下:http://blog.csdn.net/hi_dzj/article/details/6279557。

0 0