C++中的string 类型占几个字节
C++中的string 類型占幾個字節
一:先看一道面面試題:
題目是要求輸出:TrendMicroSoftUSCN 然后要求修改程序,使程序能輸出以上結果.代碼如下:
#include <iostream> #include <string> using namespace std; int main(int argc,char * argv[]) {string strArr1[]={ “Trend “, “Micro “, “soft “};string *p=new string[2];p[0]= “US “;p[1]= “CN “;cout < <sizeof(strArr1) < <endl;cout < <sizeof(p) < <endl;cout < <sizeof(string) < <endl;for(int i=0;i <sizeof(strArr1)/sizeof(string);i++)cout < <strArr1;for(i=0;i <sizeof(p)/sizeof(string);i++)cout < <p;cout < <endl; }修改之后的程序:
#include <iostream> #include <string> using namespace std; int main(int argc,char * argv[]) {string strArr1[]={"Trend","Micro","soft"};string *p=new string[2];p[0]= "US";p[1]= "CN";cout<<"sizeof(strArr1):"<<sizeof(strArr1)<<endl;cout<<"sizeof(p):"<<sizeof(p)<<endl;cout<<"sizeof(string):"<<sizeof(string) <<endl;for(int i=0;i<sizeof(strArr1)/sizeof(string);i++)cout<<strArr1[i];for(int i=0;i<sizeof(*p)*2/sizeof(string);i++)cout <<p[i];cout<<endl; }注意:sizeof(strarr1)表示該數組所占空間,相當于sizeof(string)*3,而sizeof(p),指針所占的空間均為4,*p,才是其所指占用的空間。
如果:
二:在C語言中我們操作字符串肯定用到的是指針或者數組,這樣相對來說對字符串的處理還是比較麻煩的,好在C++中提供了string 類型的支持,讓我們在處理字符串時方便了許多。
#include <iostream> using namespace std;int main(void) {string str_test1; string str_test2 = "Hello World"; int value1, value2, value3; value1 = sizeof(str_test1); value2 = sizeof(str_test2); value3 = sizeof(string);cout<<"str_test1占 "<<value1<<" 個字節"<<endl; cout<<"str_test2占 "<<value2<<" 個字節"<<endl; cout<<"string占 "<<value3<<" 個字節"<<endl; system("pause"); return 0; }首先,我用G++編譯運行,得到的結果如下圖所示:
這說明string占4個字節。之后,我用VS2012編譯運行,得到的結果如下圖所示:
奇怪,這里string竟然占28個字節。
這里,我們注意觀察,還會發現一個問題,不管有沒有對string類型的變量賦值,或者是賦什么值,得到的結果是一樣的。
下面,來解釋上述問題:
string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string里放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態分配的,與sizeof()無關。 ? ?sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()為12、32字節的庫實現。通常,我們所用到的 string 類型一般都會是這樣實現:
?
所以,我們一般接觸到的string類型所占字節數為 8+。
總結
以上是生活随笔為你收集整理的C++中的string 类型占几个字节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用IAR调试程序时直接跳过断点执行后面程
- 下一篇: C++中#if 0 ... #endif