zoukankan      html  css  js  c++  java
  • (转载)sizeof和sizeof(string)的问题

    (转载)http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html

    今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:

    string strArr1[]={"Trend", "Micro", "Soft"};

    sizeof(strArr1)=12

    转自:http://apps.hi.baidu.com/share/detail/30398570

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

    #include <iostream>
    #include <bitset>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string name;
        cout << sizeof(name) << endl;
        cout << sizeof(string) << endl;
    
        string addr("BeiJing ShangHai");
        cout << sizeof(addr) << endl;
        cout << sizeof(string) << endl;
    
        string addrList[] = {"HeiFei", "TianJin", "NanJing"};
        cout << sizeof(addrList) << endl;
    
        return 0;
    }

    程序输出:

    Windows下结果

    Linux下输出结果

    结论:

    (1)string在不同的平台上实现是有所不同的。

    (2)sizeof确实是咋编译器起作用的。

  • 相关阅读:
    java三大框架
    Servlet 工作原理解析
    Android四大基本组件介绍与生命周期
    wait 和 sleep
    Linux Mysql使用
    Android开发人员必备的10 个开发工具
    AIDL
    IPC Binder
    php 比较2字符串相似度 百分比
    php 数字 的简单加解密
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3072483.html
Copyright © 2011-2022 走看看