sizeof的一点点整理

sizeof是运算符  strlen是函数

sizeof不算函数调用

strlen*(char*)函数求的是字符串的实际长度 遇到第一个‘\0’ 返回计数值 

sizeof  返回的是变量声明后所占的内存数  不是实际长度

sizeof 可以用类型做参数 strlen只能用char*做参数  而且必须以‘\0’结尾

sizeof 后如果是类型必须加括弧  变量名可以不加 


sizeof   是判断数据类型长度的关键字

sizeof   是c/c++中的一个操作符,其作用是返回一个对象或者类型所占的内存字节数。

其返回值类型为size_t,在头文件stddef.h中定义。这个值取决于编译系统。

它的值之和最终类型有关,

c99规定  函数、不能确定类型的表达式以及位域成员不能被计算sizeof值,

例如sizeof(foo);//error 

void  foo2(  )

{

}

 sizeof(foo2());//error 

struct  S {

 unsigned  int  f1; 

unsigned   int  f2; 

unsigned   int  f3;

 };

 sizeof(S.f1);//error

sizeof  的计算发生在编译时刻 可以被当作常量表达式使用(最新的c99可以在运行时刻计算)

基本数据类型的sizeof在不同系统可能不同

指针相当于计算机内部地址总线的宽度  32位计算机中指针变量的返回值是4  64位中是8

数组的sizeof相当于数组所占的内存字节数


附  作业

  char  c=128;

        //   1000 0000

  unsigned char uc=128; 

      //    1000  0000

  unsigned short us=0;

      //   0000  0000  0000 0000

  us = c+uc;

     //   1111 1111 1000 0000

     //   0000 0000 1000 0000  

    //    0000 0000 0000 0000

  printf("%x\n",us);

     //  0x0

  us=(unsigned char)c +uc;

    //  (unsigned char)c   0000 0000 1000 0000

   //                                0000 0000 1000 0000

  //                                 0000 0001 0000 0000

  printf("%x\n",us);

  //  0x100

  us = c+(char)us;

    //       1111 1111 1000 0000

   //        1111  1111 1000 0000

   //         1111  1111 0000 0000

  printf("%x\n",us);

  //  0xff00

}

   

你可能感兴趣的:(sizeof的一点点整理)