关于sizeof

       首先要明确sizeof是运算符不是函数。sizeof()。括号内的内容在编译过程中是不被编译的,而是被替代类型。

       如a = 8;sizeof(a),a不管是什么,只是被替换成类型sizeof(int),结果是4.如果sizeof(a=6)呢,也是一样被替换成a的类型int。但要注意a=6是不被编译的,所以执行完sizeof(a=6)后,a的值还是8。是不变的。

请记住一下的几个结论。

        1,对函数使用sizeof,在编译阶段会被函数返回值的类型替代。如int f1(){return 0;}
               sizeof(f1) == sizeof(int)
        2, 只要是指针大小都是4
              sizeof(string* ) == 4
        3,数组的大小是各维数的乘积*数组元素的大小
            string strArr[] = {"adb","eeww","gfdf"};
            sizeof(strArr)== 12; //  3维 * string的大小 = 3*4 =12
            int ** a[3][4];
            sizeof(a) == 3*4*4= 48;// 3*4维 * 指针的大小 = 3*4*4=48;

            关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论:string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。   
           sizeof(s tring)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是VC6.0测试后sizeof(string)=16.还是跟编译器有关

sizeof 与 strlen的区别:

        1,sizeof是运算符strlen是函数

        2,sizeof可以用类型做参数,strlen智能用char*做参数并且是以“\0”;strlen返回大小不计算\0;

      例1:
        char* ss="0123456789";
        sizeof(ss) = 4;
        sizeof(*ss)= 1;//第一个字符
        strlen(ss) = 10;
      例2:
       char ss[]= "0123456789";	
       sizeof(ss)= 11;
       sizeof(*ss) = 1;
       strlen(ss)= 10;
      例3:
       char ss[100]="0123456789";
       sizof(ss)=100;
       sizeof(*ss)=1;
       strlen(ss)=10;

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值