sizeof()使用的几点注意以及小数转二进制数

    技术2022-05-11  82

    一个例子:char* ss = "0123456789";sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[] = "0123456789";sizeof(ss) 结果 11 ===》ss是数组,计算到/0位置,因此是10+1sizeof(*ss) 结果 1 ===》*ss是第一个字符char ss[100] = "0123456789";sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到/0为止之前int ss[100] = "0123456789";sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''/0''结尾的char q[]="abc";char p[]="a/n";sizeof(q),sizeof(p),strlen(q),strlen(p);结果是 4 3 3 2      第二个例子:class X{int i;int j;char k;};X x;cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐cout<<sizeof(x)<<endl; 结果 12 同上第三个例子:char szPath[MAX_PATH]  如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(void fun(char szPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)

     * 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。   * 2.sizeof是算符,strlen是函数。   * 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'/0'结尾的。sizeof还可以用函数做参数,比如:      short f();      printf("%d/n", sizeof(f()));      输出的结果是sizeof(short),即2。    * 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。

    注意编译器进行内存边界对齐 

    struct sample2{    char a;     ///1    int b;        ///4};#pragma pack( 8 )    /// 1 + 4  = 5 —> 8(  8 —> 4  )#pragma pack( 16 )    /// 1 + 4 = 5 —> 8( 16 —> 4  )    说明:#pragma pack告诉编译器进行内存边界对齐,一般都是采用编译器的设置对整个项目采用同一对齐方案,而且通常为缺省8字节对齐。 

     

    补充一个——小数转2进制数

    问:0.1十进制怎么转换成其他进制了?如八进制

    可以先转换成二进制,用乘二取整法先转换     算式               整数         0.1     *       2     ------         0.2   ……   0       /小数点后第一位     *       2     ------         0.4   ……   0     *       2     -----         0.8   ……   0     *       2     ------         1.6   ……   1     ---》注:剩小数         0.6     *       2     -----         1.2   ……   1     ---》         0.2     *       2     ------         0.4   ……   0     ……     ……     ……     ……下面好象是个循环了         结果     0.1D   =     0.00011B   //这里精确到小数点后5位                 二进制再可以转化为其他进制,如八进制     方法是从小数点后三位一组,后面不够则加0,然后每组里,进行二进制和八进制的转化         上面的就是   0.   000   110   B     =   0.06   O         二进制再可以转化为十六进制,跟八进制方法相同     唯一区别就是小数点后要四位一组  

    最新回复(0)