sizeof 总结

    技术2022-05-11  117

    sizeof操作符以字节形式给出了其操作数的存储大小。

    作用:1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。2、sizeof的另一个的主要用途是计算数组中元素的个数。

    计算结果:1、若操作数具有类型char、unsigned char或signed char,其结果等于1。   ANSI C正式规定字符类型为1字节。 2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。4、当操作数具有数组类型时,其结果是数组的总字节数。5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。 让我们看如下结构: struct {char b; double x;} a; 在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。 这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x放在被4整除的地址。

    6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 例子:char s1[]=""; char s2[]="Hello world!"; char *p = s2; char *q = s1; char *r = (char *)malloc(100); char str1[]="123456789"; char *a[]={"123","asdfsdf","0kle3340j"};  char s3[10]={'m','o','b','i','l'}; char s4[20]={'A','N','S','I','/0','C','+','+'}; char s5[8]={'I','S','O','C','+','+','M'};

     int i; int j = 10; float f; float k=12.45; long l; double d;

    void func(char str[100]){ printf("sizeof---str=%d/n",sizeof(str));}

    int tenof(char par){ return par*10;}

    func(str);

    printf("tenof(100)=%d",tenof(100));printf("tenof(127)=%d",tenof(127));printf("tenof(128)=%d",tenof(128));printf("tenof('i')=%d",tenof('i'));

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

    sizeof(s1)=1sizeof(s2)=13sizeof(p)=4sizeof(q)=4sizeof(r)=4sizeof(str)=4

    strlen(s3)=5strlen(s4)=4strlen(s5)=7

    sizeof(i)=4sizeof(j)=4sizeof(f)=4sizeof(k)=4sizeof(l)=4sizeof(d)=8

    sizeof(a)=12sizeof(a[0])=4sizeof(a[1])=4sizeof(a[2])=4

    sizeof---str=4tenof(100)=1000tenof(127)=1270tenof(128)=-1280   //a error,ASCII code 000~127 is standard.tenof('i')=1050


    最新回复(0)