Ma Jia nan
聽聽
vector<string> svec;
聽聽 string s( "MaJianan" ); |
insert()灝嗙浜屼釜鍙傛暟錛堣琚彃鍏ョ殑鍊鹼級鎻掑叆鍒扮涓涓弬鏁幫紙鎸囧悜瀹瑰櫒涓煇涓綅緗殑iterator錛夋寚鍚戠殑浣嶇疆鐨勫墠闈€?
鏇翠負闅忔満鐨勬彃鍏ユ搷浣滃彲浠ュ涓嬪疄鐜幫細
聽聽 string s1( "yuanlaishini" );
聽聽 iter = find( slist.begin(), slist.end(), s1 ); |
find()榪斿洖琚煡鎵懼厓绱犲湪瀹瑰櫒涓殑浣嶇疆錛屽鏋滄煡鎵懼け璐ワ紝榪斿洖end()iterator.
聽聽聽
//slist.push_back( value )絳変環浜幝犅犅?
slist.insert( slist.end(), value );
聽
2錛?鍦ㄦ煇涓綅緗彃鍏ユ寚瀹氭暟閲忕殑鍏冪礌.
聽聽 渚嬪錛屽湪vector鐨勫紑濮嬪鎻掑叆10涓狹aJianan錛?
聽聽
vector<string> svec; 聽聽 svec.insert( svec.begin(), 10, mjn ); |
聽
3錛夊悜瀹瑰櫒鎻掑叆涓孌佃寖鍥村唴鐨勫厓绱狅細
聽string sa[3] = { "MaJianan", "yuanlaishini", "blog.sina.com.cn"};
聽 聽//鎻掑叆鏁扮粍涓殑鍏ㄩ儴鍏冪礌
聽 聽//鎻掑叆鏁扮粍涓殑閮ㄥ垎鍏冪礌 |
聽
4錛夐氳繃涓瀵筰terator鏉ユ爣璁板甫鎻掑叆鍊肩殑鑼冨洿錛屽彲浠ユ槸鍙︿竴涓獀ector
渚嬩竴錛?br />聽聽 //鎻掑叆svec涓惈鏈夌殑鍏冪礌錛屼粠svec2涓棿寮濮?br />聽聽 svec2.insert( svec2.begin() + svec2.size()/2, svec.begin(), svec.end() );
聽聽 渚嬩簩錛?br />聽聽 //鎶妔evc涓殑鍏冪礌鎻掑叆鍒皊list涓璼Value鐨勫墠闈?br />聽聽 list<string> slist; |
浜?欏哄簭瀹瑰櫒鎿嶄綔涔嬪垹闄わ紙erase錛?/strong>
1錛?鍒犻櫎鍗曚釜鍏冪礌
list<string> slist; |
聽
2錛?鍒犻櫎鏈変竴瀵筰terator鏍囪鐨勪竴孌佃寖鍥村唴鐨勫厓绱?
//鍒犻櫎鎵鏈夊厓绱?br />slist.erase( slist.begin(), slist.end() );
//鍒犻櫎閮ㄥ垎鍏冪礌
渚嬩簩錛?br />list<string>::iterator first, last; |
3錛?涓巔ush_back()鐩稿搴旓紝pop_back()鍒犻櫎瀹瑰櫒鐨勬湯灝懼厓绱犮?
涓?欏哄簭瀹瑰櫒鎿嶄綔涔嬭祴鍊?=)鍜屽鎹?swap)
//slist1鍚湁8涓厓绱?br />//slist2鍚湁16涓厓绱?br />1)濡傛灉
slist1 = slist2;
聽
聽 slist1鎷ユ湁涓庤鎷瘋礉瀹瑰櫒鐩稿悓鐨勫厓绱犳暟鐩?--16.slist2鏈?6涓厓绱狅紝娌℃湁鍙樺寲銆?br />聽 slist1涓師鏉ョ殑8涓厓绱犺鍒犻櫎(璋冪敤string鐨勬瀽鏋勫嚱鏁?
2)濡傛灉 slist1.swap( slist2 );
聽
聽 slist1鐜板湪鏈?6涓厓绱狅紝鑰宻list2鍑芥暟slist1涓師鏈夌殑8涓厓绱犵殑鎷瘋礉
聽 濡傛灉涓や釜瀹瑰櫒闀垮害涓嶅悓錛屽垯閲嶇疆瀹瑰櫒鐨勯暱搴β?
聽
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 鍏充簬 sizeof() 鐨勪竴浜涙濊?/font>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽椹槈妤?br />
鍏抽敭璇嶏細
sizeof
榪欐槸緗戜笂鐨勪竴涓笘瀛愶紝鏈鍒濇潵鑷偅閲屽凡緇忚涓嶅緱浜嗭紝涓嶈繃鎴戣寰楀緢涓嶉敊銆?/font>
鎴戝鍘熸枃鍋氫簡涓浜涗慨鏀癸紝騫舵坊鍔犱簡涓浜涘唴瀹廣傚鏋滄湁浠涔堥敊璇殑鍦版柟錛岃澶у鎸囨錛岃阿璋~
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 --- majianan 2005-12-19
聽
0.鍏抽敭瀛?/font> 錛歴izeof錛屽瓧鑺傚榻愶紝綾誨瀷澶у皬
鍓嶅悜澹版槑錛?/font>
聽聽聽 sizeof錛屼竴涓叾璨屼笉鎵殑瀹朵紮錛屽紩鏃犳暟鑿滈笩绔熸姌鑵?
聽聽聽 灝忚櫨鎴戝綋鍒濅篃娌″皯鐘糠緋婏紝縐夌潃鈥滆緵鑻︽垜涓涓紝騫哥鍗冧竾浜衡濈殑浼熷ぇ鎬濇兂,鎴戝喅瀹氬皢鍏跺敖鍙兘璇︾粏鐨勬葷粨涓涓嬨?
聽聽聽 浣嗗綋鎴戞葷粨鐨勬椂鍊欐墠鍙戠幇錛岃繖涓棶棰樻棦鍙互綆鍗曪紝鍙堝彲浠ュ鏉傘傛墍浠ユ湰鏂囨湁鐨勫湴鏂瑰茍涓嶉傚悎鍒濆鑰咃紝鐢氳嚦閮芥病鏈夊繀瑕佸ぇ浣滄枃绔犮備絾濡傛灉浣犳兂鈥滅煡鍏剁劧錛屾洿鐭ュ叾鎵浠ョ劧鈥濈殑璇濓紝閭d箞榪欑瘒鏂囩珷瀵逛綘鎴栬鏈夋墍甯姪銆?br />聽聽聽
聽聽 聽鑿滈笩鎴戝C++鐨勬帉鎻″皻鏈繁鍏ワ紝鍏朵腑涓嶄箯閿欒錛屾榪庡悇浣嶆寚姝e晩
1. 瀹氫箟錛?br /> 聽聽聽 sizeof鏄綍鏂圭鍦o紵
聽聽聽 sizeof 涔?C/C++ 涓殑涓涓搷浣滅錛坥perator錛夋槸涔熴傜畝鍗曡鍏朵綔鐢ㄥ氨鏄繑鍥炰竴涓璞℃垨鑰呯被鍨嬫墍鍗犵殑鍐呭瓨瀛楄妭鏁般?br />
MSDN涓婄殑瑙i噴涓猴細
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types).This keyword returns a value of type size_t.
聽聽聽 鍏惰繑鍥炲肩被鍨嬩負size_t錛屽湪澶存枃浠秙tddef.h涓畾涔夈傝繖鏄竴涓緷璧栦簬緙栬瘧緋葷粺鐨勫鹼紝涓鑸畾涔変負
typedef unsigned int size_t;
聽聽聽 涓栦笂緙栬瘧鍣ㄦ灄鏋楁繪伙紝浣嗕綔涓轟竴涓鑼冿紝瀹冧滑閮戒細淇濊瘉char銆乻igned char鍜寀nsigned char鐨剆izeof鍊間負1錛屾瘯绔焎har鏄垜浠紪紼嬭兘鐢ㄧ殑鏈灝忔暟鎹被鍨嬨?br />
2. 璇硶錛?/font>
聽聽聽 sizeof鏈変笁縐嶈娉曞艦寮忥紝濡備笅錛?br />聽聽聽 1) sizeof( object );聽聽聽 // sizeof( 瀵硅薄 );
聽聽聽 2) sizeof( type_name ); // sizeof( 綾誨瀷 );
聽聽聽 3) sizeof object;聽聽聽聽聽聽 // sizeof 瀵硅薄;
鎵浠ワ紝
int i;
sizeof( i );聽聽聽聽 // ok
sizeof i;聽聽 聽聽聽聽 // ok
sizeof( int );聽聽 // ok
sizeof int;聽聽聽聽聽 // error
鏃㈢劧鍐欐硶2鍙互鐢ㄥ啓娉?浠f浛錛屼負姹傚艦寮忕粺涓浠ュ強鍑忓皯鎴戜滑澶ц剳鐨勮礋鎷咃紝絎?縐嶅啓娉曪紝蹇樻帀瀹冨惂錛?
瀹為檯涓婏紝sizeof璁$畻瀵硅薄鐨勫ぇ灝忎篃鏄漿鎹㈡垚瀵瑰璞$被鍨嬬殑璁$畻銆備篃灝辨槸璇達紝鍚岀綾誨瀷鐨勪笉鍚屽璞″叾sizeof鍊奸兘鏄竴鑷寸殑銆?
榪欓噷錛屽璞″彲浠ヨ繘涓姝ュ歡浼歌嚦琛ㄨ揪寮忥紝鍗硈izeof鍙互瀵逛竴涓〃杈懼紡姹傚箋傜紪璇戝櫒鏍規嵁琛ㄨ揪寮忕殑鏈緇堢粨鏋滅被鍨嬫潵紜畾澶у皬錛屼竴鑸笉浼氬琛ㄨ揪寮忚繘琛岃綆椼?
渚嬪錛?
sizeof( 2 );聽聽聽聽聽聽聽聽// 2鐨勭被鍨嬩負int錛屾墍浠ョ瓑浠蜂簬 sizeof( int );
sizeof( 2 + 3.14 );聽// 3.14鐨勭被鍨嬩負double錛?涔熶細琚彁鍗囨垚double綾誨瀷錛屾墍浠ョ瓑浠蜂簬 sizeof( double );
聽聽聽 sizeof涔熷彲浠ュ涓涓嚱鏁拌皟鐢ㄦ眰鍊鹼紝鍏?font color="#0000ff">緇撴灉鏄嚱鏁拌繑鍥炵被鍨嬬殑澶у皬錛屽嚱鏁板茍涓嶄細琚皟鐢ㄣ?/font>鎴戜滑鏉ョ湅涓涓畬鏁寸殑渚嬪瓙錛?
*********************************************************
char foo()
{
聽聽聽聽printf("foo() has been called.\n");
聽聽聽聽return 'a';
}
int main()
{
聽聽聽聽size_t sz = sizeof( foo() );聽聽 // foo() 鐨勮繑鍥炲肩被鍨嬩負char錛屾墍浠z = sizeof(char)錛屼絾鍑芥暟foo()騫朵笉浼氳璋冪敤
聽聽聽聽printf("sizeof( foo() ) = %d\n", sz);
}
*********************************************************
C99鏍囧噯瑙勫畾錛屽嚱鏁般佷笉鑳界‘瀹氱被鍨嬬殑琛ㄨ揪寮忎互鍙婁綅鍩燂紙bit-field錛夋垚鍛樹笉鑳借璁$畻sizeof鍊鹼紝鍗充笅闈㈣繖浜涘啓娉曢兘鏄敊璇殑錛?
聽聽聽 sizeof( foo );聽聽聽聽 // error
聽聽聽 void foo2() { }
聽聽聽 sizeof( foo2() );聽 // error
聽聽聽 struct S
聽聽聽 {
聽聽聽聽聽聽聽聽unsigned int f1 : 1;
聽聽聽聽聽聽聽聽unsigned int f2 : 5;
聽聽聽聽聽聽聽聽unsigned int f3 : 12;
聽聽聽 };
聽聽聽聽sizeof( S.f1 );聽聽 // error
3. sizeof鐨勫父閲忔?/font>
聽聽聽 sizeof鐨勮綆楀彂鐢熷湪緙栬瘧鏃跺埢錛屾墍浠ュ畠鍙互琚綋浣滃父閲忚〃杈懼紡浣跨敤銆傚錛?
char ary[ sizeof( int ) * 10 ];聽聽 // ok
鏈鏂扮殑C99鏍囧噯瑙勫畾sizeof涔熷彲浠ュ湪榪愯鏃跺埢榪涜璁$畻銆傚涓嬮潰鐨勭▼搴忓湪Dev-C++涓彲浠ユ紜墽琛岋細
int n;
n = 10;聽聽聽聽聽聽聽 // n鍔ㄦ佽祴鍊?br />char ary[n];聽聽 // C99涔熸敮鎸佹暟緇勭殑鍔ㄦ佸畾涔?br />printf("%d\n", sizeof(ary)); // ok. 杈撳嚭10
浣嗗湪娌℃湁瀹屽叏瀹炵幇C99鏍囧噯鐨勭紪璇戝櫒涓氨琛屼笉閫氫簡錛屼笂闈㈢殑浠g爜鍦╒C6涓氨閫氫笉榪囩紪璇戙傛墍浠ユ垜浠?font color="#0000ff">鏈濂借繕鏄涓簊izeof鏄湪緙栬瘧鏈熸墽琛岀殑錛岃繖鏍蜂笉浼氬甫鏉ラ敊璇紝璁╃▼搴忕殑鍙Щ妞嶆у己浜涖?
4. 鍩烘湰鏁版嵁綾誨瀷鐨剆izeof
榪欓噷鐨勫熀鏈暟鎹被鍨嬫寚short銆乮nt銆乴ong銆乫loat銆乨ouble榪欐牱鐨勭畝鍗曞唴緗暟鎹被鍨嬨傜敱浜庡畠浠兘鏄拰緋葷粺鐩稿叧鐨勶紝鎵浠ュ湪涓嶅悓鐨勭郴緇熶笅鍙栧煎彲鑳戒笉鍚屻傝繖鍔″繀寮曡搗鎴戜滑鐨勬敞鎰忥紝灝介噺涓嶈鍦ㄨ繖鏂歸潰緇欒嚜宸辯▼搴忕殑縐繪閫犳垚楹葷儲銆?
涓鑸殑錛屽湪32浣嶇紪璇戠幆澧冧腑錛宻izeof(int)鐨勫彇鍊間負4銆?
5. 鎸囬拡鍙橀噺鐨剆izeof
瀛﹁繃鏁版嵁緇撴瀯鐨勪綘搴旇鐭ラ亾鎸囬拡鏄竴涓緢閲嶈鐨勬蹇碉紝瀹冭褰曚簡鍙︿竴涓璞$殑鍦板潃銆?font color="#0000ff">鏃㈢劧鏄潵瀛樻斁鍦板潃鐨勶紝閭d箞瀹冨綋鐒剁瓑浜庤綆楁満鍐呴儴鍦板潃鎬葷嚎鐨勫搴︺?/font>鎵浠ュ湪32浣嶈綆楁満涓紝涓涓寚閽堝彉閲忕殑榪斿洖鍊煎繀瀹氭槸4錛堟敞鎰忕粨鏋滄槸浠ュ瓧鑺備負鍗曚綅錛夈傚彲浠ラ璁★紝鍦ㄥ皢鏉ョ殑64浣嶇郴緇熶腑鎸囬拡鍙橀噺鐨剆izeof緇撴灉涓?銆?
*********************************************************
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();聽// 鍑芥暟鎸囬拡
sizeof( pc ); // 緇撴灉涓?
sizeof( pi ); // 緇撴灉涓?
sizeof( ps ); // 緇撴灉涓?
sizeof( ppc );// 緇撴灉涓?
sizeof( pf ); // 緇撴灉涓?
*********************************************************
鎸囬拡鍙橀噺鐨剆izeof鍊間笌鎸囬拡鎵鎸囩殑瀵硅薄娌℃湁浠諱綍鍏崇郴錛屾鏄敱浜庢墍鏈夌殑鎸囬拡鍙橀噺鎵鍗犲唴瀛樺ぇ灝忕浉絳夛紝鎵浠FC娑堟伅澶勭悊鍑芥暟浣跨敤涓や釜鍙傛暟WPARAM銆丩PARAM灝辮兘浼犻掑悇縐嶅鏉傜殑娑堟伅緇撴瀯錛堜嬌鐢ㄦ寚鍚戠粨鏋勪綋鐨勬寚閽堬級銆?
6. 鏁扮粍鐨剆izeof
鏁扮粍鐨剆izeof鍊肩瓑浜庢暟緇勬墍鍗犵敤鐨勫唴瀛樺瓧鑺傛暟錛屽錛?
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 緇撴灉涓?錛屽瓧絎?鏈熬榪樺瓨鍦ㄤ竴涓狽ULL緇堟絎?br />sizeof( a2 ); // 緇撴灉涓?*4=12錛堜緷璧栦簬int錛?
涓浜涙湅鍙嬪垰寮濮嬫椂鎶妔izeof褰撲綔浜嗘眰鏁扮粍鍏冪礌鐨勪釜鏁幫紝鐜板湪錛屼綘搴旇鐭ラ亾榪欐槸涓嶅鐨勩傞偅涔堝簲璇ユ庝箞姹傛暟緇勫厓绱犵殑涓暟鍛紵
Easy錛岄氬父鏈変笅闈袱縐嶅啓娉曪細
int c1 = sizeof( a1 ) / sizeof( char );聽聽聽 // 鎬婚暱搴?鍗曚釜鍏冪礌鐨勯暱搴?br />int c2 = sizeof( a1 ) / sizeof( a1[0]); 聽聽 // 鎬婚暱搴?絎竴涓厓绱犵殑闀垮害
鍐欏埌榪欓噷錛屾彁涓闂紝涓嬮潰鐨刢3錛宑4鍊煎簲璇ユ槸澶氬皯鍛紵
*********************************************************
void foo3(char a3[3])
{
聽聽聽聽int c3 = sizeof( a3 ); // c3 ==
}
void foo4(char a4[])
{
聽聽聽聽int c4 = sizeof( a4 ); // c4 ==
}
*********************************************************
涔熻褰撲綘璇曞浘鍥炵瓟c4鐨勫兼椂宸茬粡鎰忚瘑鍒癱3絳旈敊浜嗭紝鏄殑錛宑3!=3銆?
榪欓噷鍑芥暟鍙傛暟a3宸蹭笉鍐嶆槸鏁扮粍綾誨瀷錛岃屾槸铚曞彉鎴愭寚閽堛?/font>鐩稿綋浜巆har* a3錛屼負浠涔堜粩緇嗘兂鎯沖氨涓嶉毦鏄庣櫧銆?
鎴戜滑璋冪敤鍑芥暟foo1鏃訛紝紼嬪簭浼氬湪鏍堜笂鍒嗛厤涓涓ぇ灝忎負3鐨勬暟緇勫悧錛熶笉浼氾紒
鏁扮粍鏄滀紶鍧鈥濈殑錛岃皟鐢ㄨ呭彧闇灝嗗疄鍙傜殑鍦板潃浼犻掕繃鍘伙紝鎵浠3鑷劧涓烘寚閽堢被鍨嬶紙char*錛夛紝c3鐨勫間篃灝變負4銆?
7.string鐨剆izeof
涓涓猻tring鐨勫ぇ灝忎笌瀹冩墍鎸囧悜鐨勫瓧絎︿覆鐨勯暱搴︽棤鍏?/font>銆?br />
*********************************************************
string st1("blog.sina.com.cn");
string st2("majianan");
string st3;
string *ps = &st1;
cout << "st1: " << sizeof(st1) << endl;
cout << "st2: " << sizeof(st2) << endl;
cout << "st3: " << sizeof(st3) << endl;
cout << "ps: " << sizeof(ps) << endl;
cout << "*ps: " << sizeof(*ps) << endl;
*********************************************************
杈撳嚭緇撴灉涓猴細
st1錛?28
st2錛?28
st3錛?28
ps錛?4
*ps錛?28
*********************************************************
瀵逛簬涓嶅悓鐨凷TL錛孲tring綾葷殑緇撴瀯瀹氫箟浼氭湁鎵涓嶅悓
鎵浠ヤ笉鍚岀殑宸ュ叿錛屼緥濡俈C++錛屽拰.NET錛岀粨鏋滀細鏈夋墍涓嶅悓錛?br />鍦╒C++6.0涓紙鎴戠殑鏈哄櫒錛夌粨鏋滄槸16
鍦?NET2003涓粨鏋滄槸28
浣嗘槸瀵逛簬鍚屼竴涓紪璇戝櫒錛岄偅涔堝畠鐨勭粨鏋滈兘鏄竴瀹氱殑
8.寮曠敤鐨剆izeof
sizeof鎿嶄綔絎﹀簲鐢ㄥ湪寮曠敤綾誨瀷涓婄殑鏃跺欙紝榪斿洖鐨勬槸鍖呭惈琚紩鐢ㄥ璞℃墍闇鐨勫唴瀛橀暱搴︼紙鍗寵寮曠敤瀵硅薄鐨勫ぇ灝忥級
*********************************************************
cout << "short:\t" << sizeof(short) << endl;
cout << "short*:\t" << sizeof(short*) << endl;
cout << "short&:\t" << sizeof(short&) << endl;
cout << "short[4]:\t" << sizeof(short[4]) << endl;
cout << "int&:\t" << sizeof(int&) << endl;
*********************************************************
杈撳嚭緇撴灉涓猴細
short錛?2
short*錛?4
short&錛?2
short[4]錛?8
int&錛?4
9. 緇撴瀯浣撶殑sizeof
榪欐槸鍒濆鑰呴棶寰楁渶澶氱殑涓涓棶棰橈紝鎵浠ヨ繖閲屾湁蹇呰澶氳垂鐐圭瑪澧ㄣ傝鎴戜滑鍏堢湅涓涓粨鏋勪綋錛?
struct S1
{
聽聽聽 char c;
聽聽聽 int i;
};
闂畇izeof(s1)絳変簬澶氬皯錛?
鑱槑鐨勪綘寮濮嬫濊冧簡錛宑har鍗?涓瓧鑺傦紝int鍗?涓瓧鑺傦紝閭d箞鍔犺搗鏉ュ氨搴旇鏄?銆?
鏄繖鏍峰悧錛?
浣犲湪浣犳満鍣ㄤ笂璇曡繃浜嗗悧錛?
涔熻浣犳槸瀵圭殑錛屼絾寰堝彲鑳戒綘鏄敊鐨勶紒
VC6涓寜榛樿璁劇疆寰楀埌鐨勭粨鏋滀負8銆?br />
聽聽聽 Why錛熶負浠涔堝彈浼ょ殑鎬繪槸鎴戯紵
璇蜂笉瑕佹伯涓э紝鎴戜滑鏉ュソ濂界悽紓ㄤ竴涓媠izeof鐨勫畾涔?鈥斺?sizeof鐨勭粨鏋滅瓑浜庡璞℃垨鑰呯被鍨嬫墍鍗犵殑鍐呭瓨瀛楄妭鏁般傚ソ鍚э紝閭e氨璁╂垜浠潵鐪嬬湅S1鐨勫唴瀛樺垎閰嶆儏鍐碉細
S1 s1 = { 'a', 0xFFFFFFFF };
瀹氫箟涓婇潰鐨勫彉閲忓悗錛屽姞涓婃柇鐐癸紝榪愯紼嬪簭錛岃瀵焥1鎵鍦ㄧ殑鍐呭瓨錛屼綘鍙戠幇浜嗕粈涔堬紵
浠ユ垜鐨刅C6.0涓轟緥錛宻1鐨勫湴鍧涓?x0012FF78錛屽叾鏁版嵁鍐呭濡備笅錛?
0012FF78: 61 CC CC CC FF FF FF FF
鍙戠幇浜嗕粈涔堬紵鎬庝箞涓棿澶規潅浜?涓瓧鑺傜殑CC錛?
鐪嬬湅MSDN涓婄殑璇存槑錛?
When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.
鍘熸潵濡傛錛岃繖灝辨槸浼犺涓殑瀛楄妭瀵歸綈鍟婏紒涓涓噸瑕佺殑璇濋鍑虹幇浜嗐?
涓轟粈涔堥渶瑕佸瓧鑺傚榻愶紵
璁$畻鏈虹粍鎴愬師鐞嗘暀瀵兼垜浠紝榪欐牱鏈夊姪浜庡姞蹇綆楁満鐨勫彇鏁伴熷害錛屽惁鍒欏氨寰楀鑺辨寚浠ゅ懆鏈熶簡銆?
涓烘錛岀紪璇戝櫒榛樿浼氬緇撴瀯浣撹繘琛屽鐞嗭紙瀹為檯涓婂叾瀹冨湴鏂圭殑鏁版嵁鍙橀噺涔熸槸濡傛錛夛紝璁╁搴︿負2鐨勫熀鏈暟鎹被鍨嬶紙short絳夛級閮戒綅浜庤兘琚?鏁撮櫎鐨勫湴鍧涓婏紝璁╁搴︿負4鐨勫熀鏈暟鎹被鍨嬶紙int絳夛級閮戒綅浜庤兘琚?鏁撮櫎鐨勫湴鍧涓娿?/font>浠ユ綾繪帹錛岃繖鏍鳳紝涓や釜鏁頒腑闂村氨鍙兘闇瑕佸姞鍏ュ~鍏呭瓧鑺傦紝鎵浠ユ暣涓粨鏋勪綋鐨剆izeof鍊煎氨澧為暱浜嗐?
璁╂垜浠氦鎹竴涓婼1涓璫har涓巌nt鐨勪綅緗細
struct S2
{
聽聽聽聽int i;
聽聽聽聽char c;
};
鐪嬬湅sizeof(S2)鐨勭粨鏋滀負澶氬皯錛熸庝箞榪樻槸8銆?
鍐嶇湅鐪嬪唴瀛橈紝鍘熸潵鎴愬憳c鍚庨潰浠嶇劧鏈?涓~鍏呭瓧鑺傘?
榪欏張鏄負浠涔堝晩錛熷埆鐫鎬ワ紝涓嬮潰鎬葷粨瑙勫緥銆?
聽聽聽 瀛楄妭瀵歸綈鐨勭粏鑺傚拰緙栬瘧鍣ㄥ疄鐜扮浉鍏籌紝浣嗕竴鑸岃█錛屾弧瓚充笁涓噯鍒欙細
聽聽聽 1) 緇撴瀯浣撳彉閲忕殑棣栧湴鍧鑳藉琚叾鏈瀹藉熀鏈被鍨嬫垚鍛樼殑澶у皬鎵鏁撮櫎錛?br />聽聽聽 2) 緇撴瀯浣撴瘡涓垚鍛樼浉瀵逛簬緇撴瀯浣撻鍦板潃鐨勫亸縐婚噺錛坥ffset錛夐兘鏄垚鍛樺ぇ灝忕殑鏁存暟鍊嶏紝濡傛湁闇瑕佺紪璇戝櫒浼氬湪鎴愬憳涔嬮棿鍔犱笂濉厖瀛楄妭錛坕nternal adding錛夛紱
聽聽聽 3) 緇撴瀯浣撶殑鎬誨ぇ灝忎負緇撴瀯浣撴渶瀹藉熀鏈被鍨嬫垚鍛樺ぇ灝忕殑鏁存暟鍊嶏紝濡傛湁闇瑕佺紪璇戝櫒浼氬湪鏈鏈竴涓垚鍛樹箣鍚庡姞涓婂~鍏呭瓧鑺傦紙trailing padding錛夈?br />
聽聽聽 瀵逛簬涓婇潰鐨勫噯鍒欙紝鏈夊嚑鐐歸渶瑕佽鏄庯細
1)聽鍓嶉潰涓嶆槸璇寸粨鏋勪綋鎴愬憳鐨勫湴鍧鏄叾澶у皬鐨勬暣鏁板嶏紝鎬庝箞鍙堣鍒板亸縐婚噺浜嗗憿錛?
鍥犱負鏈変簡絎?鐐瑰瓨鍦紝鎵浠ユ垜浠氨鍙互鍙冭檻鎴愬憳鐨勫亸縐婚噺錛岃繖鏍鋒濊冭搗鏉ョ畝鍗曘傛兂鎯充負浠涔堛?
緇撴瀯浣撴煇涓垚鍛樼浉瀵逛簬緇撴瀯浣撻鍦板潃鐨勫亸縐婚噺鍙互閫氳繃瀹弌ffsetof()鏉ヨ幏寰楋紝榪欎釜瀹忎篃鍦╯tddef.h涓畾涔夛紝濡備笅錛?
#define offsetof(s,m) (size_t)&(((s *)0)->m)
渚嬪錛屾兂瑕佽幏寰桽2涓璫鐨勫亸縐婚噺錛屾柟娉曚負
size_t pos = offsetof(S2, c);// pos絳変簬4
2) 鍩烘湰綾誨瀷鏄寚鍓嶉潰鎻愬埌鐨勫儚char銆乻hort銆乮nt銆乫loat銆乨ouble榪欐牱鐨勫唴緗暟鎹被鍨嬨傝繖閲屾墍璇寸殑鈥滄暟鎹搴︹濆氨鏄寚鍏秙izeof鐨勫ぇ灝忋傜敱浜庣粨鏋勪綋鐨勬垚鍛樺彲浠ユ槸澶嶅悎綾誨瀷錛屾瘮濡傚彟澶栦竴涓粨鏋勪綋錛屾墍浠ュ湪瀵繪壘鏈瀹藉熀鏈被鍨嬫垚鍛樻椂錛屽簲褰撳寘鎷鍚堢被鍨嬫垚鍛樼殑瀛愭垚鍛橈紝鑰屼笉鏄妸澶嶅悎鎴愬憳鐪嬫垚鏄竴涓暣浣撱備絾鍦ㄧ‘瀹氬鍚堢被鍨嬫垚鍛樼殑鍋忕Щ浣嶇疆鏃跺垯鏄皢澶嶅悎綾誨瀷浣滀負鏁翠綋鐪嬪緟銆?
榪欓噷鍙欒堪璧鋒潵鏈夌偣鎷楀彛錛屾濊冭搗鏉ヤ篃鏈夌偣鎸犲ご錛岃繕鏄鎴戜滑鐪嬬湅渚嬪瓙鍚э紙鍏蜂綋鏁板間粛浠C6涓轟緥錛屼互鍚庝笉鍐嶈鏄庯級錛?
struct S3
{
聽聽聽聽char c1;
聽聽聽聽S1 s;
聽聽聽聽char c2;
};
S1鐨勬渶瀹界畝鍗曟垚鍛樼殑綾誨瀷涓篿nt錛孲3鍦ㄨ冭檻鏈瀹界畝鍗曠被鍨嬫垚鍛樻椂鏄皢S1鈥滄墦鏁b濈湅鐨勶紝鎵浠3鐨勬渶瀹界畝鍗曠被鍨嬩負int銆傝繖鏍鳳紝閫氳繃S3瀹氫箟鐨勫彉閲忥紝鍏跺瓨鍌ㄧ┖闂撮鍦板潃闇瑕佽4鏁撮櫎錛屾暣涓猻izeof(S3)鐨勫間篃搴旇琚?鏁撮櫎銆?
c1鐨勫亸縐婚噺涓?錛宻鐨勫亸縐婚噺鍛紵榪欐椂s鏄竴涓暣浣擄紝瀹冧綔涓虹粨鏋勪綋鍙橀噺涔熸弧瓚沖墠闈笁涓噯鍒欙紝鎵浠ュ叾澶у皬涓?錛屽亸縐婚噺涓?錛宑1涓巗涔嬮棿渚塊渶瑕?涓~鍏呭瓧鑺傦紝鑰宑2涓巗涔嬮棿灝變笉闇瑕佷簡錛屾墍浠2鐨勫亸縐婚噺涓?2錛岀畻涓奵2鐨勫ぇ灝忎負13錛?3鏄笉鑳借4鏁撮櫎鐨勶紝榪欐牱鏈熬榪樺緱琛ヤ笂3涓~鍏呭瓧鑺傘傛渶鍚庡緱鍒皊izeof(S3)鐨勫間負16銆?
聽聽聽 閫氳繃涓婇潰鐨勫彊榪幫紝鎴戜滑鍙互寰楀埌涓涓叕寮忥細
聽聽聽 緇撴瀯浣撶殑澶у皬絳変簬鏈鍚庝竴涓垚鍛樼殑鍋忕Щ閲忓姞涓婂叾澶у皬鍐嶅姞涓婃湯灝劇殑濉厖瀛楄妭鏁扮洰錛?/strong>鍗籌細
sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding )
聽