棣栧厛鐪嬩竴涓媠izeof鍦╩sdn涓婄殑瀹氫箟錛?/font>
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.
鐪嬪埌return榪欎釜瀛楃溂錛屾槸涓嶆槸鎯沖埌浜?jiǎn)鍑芥晭图熼敊浜?jiǎn)錛宻izeof涓嶆槸涓涓嚱鏁幫紝浣犺榪囩粰涓涓嚱鏁頒紶鍙傛暟錛岃屼笉鍔犳嫭鍙風(fēng)殑鍚楋紵sizeof鍙互錛屾墍浠izeof涓嶆槸鍑芥暟銆傜綉涓婃湁浜鴻sizeof鏄竴鍏冩搷浣滅錛屼絾鏄垜騫朵笉榪欎箞璁や負(fù)錛屽洜涓簊izeof鏇村儚涓涓壒孌婄殑瀹忥紝瀹冩槸鍦ㄧ紪璇戦樁孌墊眰鍊肩殑銆備婦涓緥瀛愶細(xì)
cout<<sizeof(int)<<endl; //
32浣嶆満涓奿nt闀垮害涓?
cout<<sizeof(1==2)<<endl; // == 鎿嶄綔絎﹁繑鍥瀊ool綾誨瀷錛岀浉褰撲簬
cout<<sizeof(bool)<<endl;
鍦ㄧ紪璇戦樁孌靛凡緇忚緲昏瘧涓猴細(xì)
cout<<4<<endl;
cout<<1<<endl;
榪欓噷鏈変釜闄烽槺錛岀湅涓嬮潰鐨勭▼搴忥細(xì)
int
a =
0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
杈撳嚭涓轟粈涔堟槸4錛?鑰屼笉鏄湡鏈涗腑鐨?錛?錛燂紵錛熷氨鍦ㄤ簬sizeof鍦ㄧ紪璇戦樁孌靛鐞嗙殑鐗規(guī)с傜敱浜巗izeof涓嶈兘琚紪璇戞垚鏈哄櫒鐮侊紝鎵浠izeof浣滅敤鑼冨洿鍐咃紝涔熷氨鏄?)閲岄潰鐨勫唴瀹逛篃涓嶈兘琚紪璇戯紝鑰屾槸琚浛鎹㈡垚綾誨瀷銆?鎿嶄綔絎﹁繑鍥炲乏鎿嶄綔鏁扮殑綾誨瀷錛屾墍浠=3鐩稿綋浜巌nt錛岃屼唬鐮佷篃琚浛鎹負(fù)錛?/font>
int
a = 0;
cout<<4<<endl;
cout<<a<<endl;
鎵浠ワ紝sizeof鏄笉鍙兘鏀寔閾懼紡琛ㄨ揪寮忕殑錛岃繖涔熸槸鍜屼竴鍏冩搷浣滅涓嶄竴鏍風(fēng)殑鍦版柟銆?/font>
緇撹錛氫笉瑕佹妸sizeof褰撴垚鍑芥暟錛屼篃涓嶈鐪嬩綔涓鍏冩搷浣滅錛屾妸浠栧綋鎴愪竴涓壒孌婄殑緙栬瘧棰勫鐞嗐?/font>
2銆乻izeof鐨勭敤娉?/font>
sizeof鏈変袱縐嶇敤娉曪細(xì)
錛?錛塻izeof(object)
涔熷氨鏄瀵硅薄浣跨敤sizeof錛屼篃鍙互鍐欐垚sizeof
object 鐨勫艦寮忋備緥濡傦細(xì)
錛?錛塻izeof(typename)
涔熷氨鏄綾誨瀷浣跨敤sizeof錛屾敞鎰忚繖縐嶆儏鍐典笅鍐欐垚sizeof
typename鏄潪娉曠殑銆備笅闈婦鍑犱釜渚嬪瓙璇存槑涓涓嬶細(xì)
int i = 2;
cout<<sizeof(i)<<endl; //
sizeof(object)鐨勭敤娉曪紝鍚堢悊
cout<<sizeof i<<endl; // sizeof
object鐨勭敤娉曪紝鍚堢悊
cout<<sizeof 2<<endl; // 2琚В鏋愭垚int綾誨瀷鐨刼bject, sizeof
object鐨勭敤娉曪紝鍚堢悊
cout<<sizeof(2)<<endl; // 2琚В鏋愭垚int綾誨瀷鐨刼bject,
sizeof(object)鐨勭敤娉曪紝鍚堢悊
cout<<sizeof(int)<<endl;//
sizeof(typename)鐨勭敤娉曪紝鍚堢悊
cout<<sizeof int<<endl; //
閿欒錛佸浜庢搷浣滅錛屼竴瀹氳鍔?)
鍙互鐪嬪嚭錛屽姞()鏄案榪滄紜殑閫夋嫨銆?/font>
緇撹錛氫笉璁簊izeof瑕佸璋佸彇鍊鹼紝鏈濂介兘鍔犱笂()銆?/font>
3銆佹暟鎹被鍨嬬殑sizeof
錛?錛塁++鍥烘湁鏁版嵁綾誨瀷
32浣岰++涓殑鍩烘湰鏁版嵁綾誨瀷錛屼篃灝眂har,short int(short),int,long int(long),float,double, long
double
澶у皬鍒嗗埆鏄細(xì)1錛?錛?錛?錛?錛?, 10銆?/font>
鑰冭檻涓嬮潰鐨勪唬鐮侊細(xì)
cout<<sizeof(unsigned int) == sizeof(int)<<endl; // 鐩哥瓑錛岃緭鍑?1
unsigned褰卞搷鐨勫彧鏄渶楂樹綅bit鐨勬剰涔夛紝鏁版嵁闀垮害涓嶄細(xì)琚敼鍙樼殑銆?/font>
緇撹錛歶nsigned涓嶈兘褰卞搷sizeof鐨勫彇鍊箋?/font>
錛?錛夎嚜瀹氫箟鏁版嵁綾誨瀷
typedef鍙互鐢ㄦ潵瀹氫箟C++鑷畾涔夌被鍨嬨傝冭檻涓嬮潰鐨勯棶棰橈細(xì)
typedef short WORD;
typedef long
DWORD;
cout<<(sizeof(short) == sizeof(WORD))<<endl; //
鐩哥瓑錛岃緭鍑?
cout<<(sizeof(long) == sizeof(DWORD))<<endl; //
鐩哥瓑錛岃緭鍑?
緇撹錛氳嚜瀹氫箟綾誨瀷鐨剆izeof鍙栧肩瓑鍚屼簬瀹冪殑綾誨瀷鍘熷艦銆?/font>
錛?錛夊嚱鏁扮被鍨?/font>
鑰冭檻涓嬮潰鐨勯棶棰橈細(xì)
int
f1(){return 0;};
double f2(){return 0.0;}
void f3(){}
cout<<sizeof(f1())<<endl; //
f1()榪斿洖鍊間負(fù)int錛屽洜姝よ璁や負(fù)鏄痠nt
cout<<sizeof(f2())<<endl; //
f2()榪斿洖鍊間負(fù)double錛屽洜姝よ璁や負(fù)鏄痙ouble
cout<<sizeof(f3())<<endl; //
閿欒錛佹棤娉曞void綾誨瀷浣跨敤sizeof
cout<<sizeof(f1)<<endl; //
閿欒錛佹棤娉曞鍑芥暟鎸囬拡浣跨敤sizeof
cout<<sizeof*f2<<endl; //
*f2錛屽拰f2()絳変環(huán)錛屽洜涓哄彲浠ョ湅浣渙bject錛屾墍浠ユ嫭鍙蜂笉鏄繀瑕佺殑銆傝璁や負(fù)鏄痙ouble
緇撹錛氬鍑芥暟浣跨敤sizeof錛屽湪緙栬瘧闃舵浼?xì)琚嚱鏁皹q斿洖鍊肩殑綾誨瀷鍙栦唬錛?/font>
4銆佹寚閽堥棶棰?/font>
鑰冭檻涓嬮潰闂錛?br>
cout<<sizeof(string*)<<endl; //
4
cout<<sizeof(int*)<<endl; //
4
cout<<sizof(char****)<<endl; // 4
鍙互鐪嬪埌錛屼笉綆℃槸浠涔堢被鍨嬬殑鎸囬拡錛屽ぇ灝忛兘鏄?鐨勶紝鍥犱負(fù)鎸囬拡灝辨槸32浣嶇殑鐗╃悊鍦板潃銆?/font>
緇撹錛氬彧瑕佹槸鎸囬拡錛屽ぇ灝忓氨鏄?銆傦紙64浣嶆満涓婅鍙樻垚8涔熶笉涓瀹氾級(jí)銆?/font>
欏轟究鍞у敡姝鍑犲彞錛孋++涓殑鎸囬拡琛ㄧず瀹為檯鍐呭瓨鐨勫湴鍧銆傚拰C涓嶄竴鏍風(fēng)殑鏄紝C++涓彇娑堜簡(jiǎn)妯″紡涔嬪垎錛屼篃灝辨槸涓嶅啀鏈塻mall,middle,big,鍙栬屼唬涔嬬殑鏄粺涓鐨刦lat銆俧lat妯″紡閲囩敤32浣嶅疄鍦板潃瀵誨潃錛岃屼笉鍐嶆槸c涓殑 segment:offset妯″紡銆備婦涓緥瀛愶紝鍋囧鏈変竴涓寚鍚戝湴鍧 f000:8888鐨勬寚閽堬紝濡傛灉鏄疌綾誨瀷鍒欐槸8888(16浣? 鍙瓨鍌ㄤ綅縐伙紝鐪佺暐孌?錛宖ar綾誨瀷鐨凜鎸囬拡鏄痜0008888(32浣嶏紝楂樹綅淇濈暀孌靛湴鍧錛屽湴浣嶄繚鐣欎綅縐?,C++綾誨瀷鐨勬寚閽堟槸f8888(32浣嶏紝鐩稿綋浜庢鍦板潃*16 + 浣嶇Щ錛屼絾瀵誨潃鑼冨洿瑕佹洿澶?銆?/font>
5銆佹暟緇勯棶棰?/font>
鑰冭檻涓嬮潰闂錛?/font>
char
a[] = "abcdef";
int b[20] = {3, 4};
char c[2][3] = {"aa",
"bb"};
cout<<sizeof(a)<<endl; //
7
cout<<sizeof(b)<<endl; //
20*4
cout<<sizeof(c)<<endl; // 6
鏁扮粍a鐨勫ぇ灝忓湪瀹氫箟鏃舵湭鎸囧畾錛岀紪璇戞椂緇欏畠鍒嗛厤鐨勭┖闂存槸鎸夌収鍒濆鍖栫殑鍊肩‘瀹氱殑錛屼篃灝辨槸7銆俢鏄緇存暟緇勶紝鍗犵敤鐨勭┖闂村ぇ灝忔槸鍚勭淮鏁扮殑涔樼Н錛屼篃灝辨槸6銆傚彲浠ョ湅鍑猴紝鏁扮粍鐨勫ぇ灝忓氨鏄粬鍦ㄧ紪璇戞椂琚垎閰嶇殑絀洪棿錛屼篃灝辨槸鍚勭淮鏁扮殑涔樼Н*鏁扮粍鍏冪礌鐨勫ぇ灝忋?/font>
緇撹錛氭暟緇勭殑澶у皬鏄悇緇存暟鐨勪箻縐?鏁扮粍鍏冪礌鐨勫ぇ灝忋?/font>
榪欓噷鏈変竴涓櫡闃憋細(xì)
int *d = new int[10];
cout<<sizeof(d)<<endl; // 4
d鏄垜浠父璇寸殑鍔ㄦ佹暟緇勶紝浣嗘槸浠栧疄璐ㄤ笂榪樻槸涓涓寚閽堬紝鎵浠izeof(d)鐨勫兼槸4銆?/font>
鍐嶈冭檻涓嬮潰鐨勯棶棰橈細(xì)
double*
(*a)[3][6];
cout<<sizeof(a)<<endl; //
4
cout<<sizeof(*a)<<endl; //
72
cout<<sizeof(**a)<<endl; //
24
cout<<sizeof(***a)<<endl; //
4
cout<<sizeof(****a)<<endl; // 8
a鏄竴涓緢濂囨殑瀹氫箟錛屼粬琛ㄧず涓涓寚鍚?double*[3][6]綾誨瀷鏁扮粍鐨勬寚閽堛傛棦鐒舵槸鎸囬拡錛屾墍浠izeof(a)灝辨槸4銆?/font>
鏃㈢劧a鏄墽琛宒ouble*[3][6]綾誨瀷鐨勬寚閽堬紝*a灝辮〃紺轟竴涓猟ouble*[3][6]鐨勫緇存暟緇勭被鍨嬶紝鍥犳sizeof(*a)=3*6*sizeof(double*)=72銆傚悓鏍風(fēng)殑錛?*a琛ㄧず涓涓猟ouble*[6]綾誨瀷鐨勬暟緇勶紝鎵浠izeof(**a)=6*sizeof(double*)=24銆?**a灝辮〃紺哄叾涓殑涓涓厓绱狅紝涔熷氨鏄痙ouble*浜?jiǎn)锛屾墍浠izeof(***a)=4銆傝嚦浜?***a錛屽氨鏄竴涓猟ouble浜?jiǎn)锛屾墍浠izeof(****a)=sizeof(double)=8銆?/font>
6銆佸悜鍑芥暟浼犻掓暟緇勭殑闂銆?/font>
鑰冭檻涓嬮潰鐨勯棶棰橈細(xì)
#include <iostream>
using namespace std;
int
Sum(int i[])
{
int sumofi = 0;
for (int j = 0; j <
sizeof(i)/sizeof(int); j++) //瀹為檯涓婏紝sizeof(i) = 4
{
sumofi +=
i[j];
}
return sumofi;
}
int
main()
{
int allAges[6] = {21, 22, 22, 19, 34,
12};
cout<<Sum(allAges)<<endl;
system("pause");
return
0;
}
Sum鐨勬湰鎰忔槸鐢╯izeof寰楀埌鏁扮粍鐨勫ぇ灝忥紝鐒跺悗姹傚拰銆備絾鏄疄闄呬笂錛屼紶鍏ヨ嚜鍑芥暟Sum鐨勶紝鍙槸涓涓猧nt 綾誨瀷鐨勬寚閽堬紝鎵浠izeof(i)=4錛岃屼笉鏄?4錛屾墍浠ヤ細(xì)浜х敓閿欒鐨勭粨鏋溿傝В鍐寵繖涓棶棰樼殑鏂規(guī)硶浣挎槸鐢ㄦ寚閽堟垨鑰呭紩鐢ㄣ?/font>
浣跨敤鎸囬拡鐨勬儏鍐碉細(xì)
int Sum(int (*i)[6])
{
int sumofi = 0;
for (int j = 0; j
< sizeof(*i)/sizeof(int); j++) //sizeof(*i) = 24
{
sumofi +=
(*i)[j];
}
return sumofi;
}
int
main()
{
int allAges[] = {21, 22, 22, 19, 34,
12};
cout<<Sum(&allAges)<<endl;
system("pause");
return
0;
}
鍦ㄨ繖涓猄um閲岋紝i鏄竴涓寚鍚慽[6]綾誨瀷鐨勬寚閽堬紝娉ㄦ剰錛岃繖閲屼笉鑳界敤int Sum(int
(*i)[])澹版槑鍑芥暟錛岃屾槸蹇呴』鎸囨槑瑕佷紶鍏ョ殑鏁扮粍鐨勫ぇ灝忥紝涓嶇劧sizeof(*i)鏃犳硶璁$畻銆備絾鏄湪榪欑鎯呭喌涓嬶紝鍐嶉氳繃sizeof鏉ヨ綆楁暟緇勫ぇ灝忓凡緇忔病鏈夋剰涔変簡(jiǎn)錛屽洜涓烘鏃跺ぇ灝忔槸鎸囧畾涓?鐨勩?br>浣跨敤寮曠敤鐨勬儏鍐靛拰鎸囬拡鐩鎬技錛?/font>
int
Sum(int (&i)[6])
{
int sumofi = 0;
for (int j = 0; j <
sizeof(i)/sizeof(int); j++)
{
sumofi += i[j];
}
return
sumofi;
}
int
main()
{
int allAges[] = {21, 22, 22, 19, 34,
12};
cout<<Sum(allAges)<<endl;
system("pause");
return
0;
}
榪欑鎯呭喌涓媠izeof鐨勮綆楀悓鏍鋒棤鎰忎箟錛屾墍浠ョ敤鏁扮粍鍋氬弬鏁幫紝鑰屼笖闇瑕侀亶鍘嗙殑鏃跺欙紝鍑芥暟搴旇鏈変竴涓弬鏁版潵璇存槑鏁扮粍鐨勫ぇ灝忥紝鑰屾暟緇勭殑澶у皬鍦ㄦ暟緇勫畾涔夌殑浣滅敤鍩熷唴閫氳繃sizeof姹傚箋傚洜姝や笂闈㈢殑鍑芥暟姝g‘褰㈠紡搴旇鏄細(xì)
#include
<iostream>
using namespace std;
int
Sum(int *i, unsigned int n)
{
int sumofi = 0;
for (int j = 0; j <
n; j++)
{
sumofi += i[j];
}
return sumofi;
}
int
main()
{
int allAges[] = {21, 22, 22, 19, 34, 12};
cout<<Sum(i,
sizeof(allAges)/sizeof(int))<<endl;
system("pause");
return
0;
}
7銆佸瓧絎︿覆鐨剆izeof鍜宻trlen
鑰冭檻涓嬮潰鐨勯棶棰橈細(xì)
char
a[] = "abcdef";
char b[20] = "abcdef";
string s = "abcdef";
cout<<strlen(a)<<endl; //
6錛屽瓧絎︿覆闀垮害
cout<<sizeof(a)<<endl; //
7錛屽瓧絎︿覆瀹歸噺
cout<<strlen(b)<<endl; //
6錛屽瓧絎︿覆闀垮害
cout<<strlen(b)<<endl; //
20錛屽瓧絎︿覆瀹歸噺
cout<<sizeof(s)<<endl; // 12,
榪欓噷涓嶄唬琛ㄥ瓧絎︿覆鐨勯暱搴︼紝鑰屾槸string綾葷殑澶у皬
cout<<strlen(s)<<endl; //
閿欒錛乻涓嶆槸涓涓瓧絎︽寚閽堛?/font>
a[1]
= '\0';
cout<<strlen(a)<<endl; //
1
cout<<sizeof(a)<<endl; // 7錛宻izeof鏄亽瀹氱殑
strlen鏄鎵句粠鎸囧畾鍦板潃寮濮嬶紝鍒板嚭鐜扮殑絎竴涓?涔嬮棿鐨勫瓧絎︿釜鏁幫紝浠栨槸鍦ㄨ繍琛岄樁孌墊墽琛岀殑錛岃宻izeof鏄緱鍒版暟鎹殑澶у皬錛屽湪榪欓噷鏄緱鍒板瓧絎︿覆鐨勫閲忋傛墍浠ュ鍚屼竴涓璞¤岃█錛宻izeof鐨勫兼槸鎭掑畾鐨勩俿tring鏄疌++綾誨瀷鐨勫瓧絎︿覆錛屼粬鏄竴涓被錛屾墍浠izeof(s)琛ㄧず鐨勫茍涓嶆槸瀛楃涓茬殑闀垮害錛岃屾槸綾籹tring鐨勫ぇ灝忋俿trlen(s)鏍規(guī)湰灝辨槸閿欒鐨勶紝鍥犱負(fù)strlen鐨勫弬鏁版槸涓涓瓧絎︽寚閽堬紝濡傛灉鎯崇敤strlen寰楀埌s瀛楃涓茬殑闀垮害錛屽簲璇ヤ嬌鐢╯izeof(s.c_str())錛屽洜涓簊tring鐨勬垚鍛樺嚱鏁癱_str()榪斿洖鐨勬槸瀛楃涓茬殑棣栧湴鍧銆傚疄闄呬笂錛宻tring綾繪彁渚涗簡(jiǎn)鑷繁鐨勬垚鍛樺嚱鏁版潵寰楀埌瀛楃涓茬殑瀹歸噺鍜岄暱搴︼紝鍒嗗埆鏄疌apacity()鍜孡ength()銆俿tring灝佽浜?jiǎn)甯哥敤浜?jiǎn)瀛楃涓叉搷浣滐紝鎵浠ュ湪C++寮鍙戣繃紼嬩腑錛屾渶濂戒嬌鐢╯tring浠f浛C綾誨瀷鐨勫瓧絎︿覆銆?/font>
鎴戞敞錛氬叧浜巗izeof(string)錛屽ソ鍍忎笉鍚岀殑瀹炵幇榪斿洖鐨勭粨鏋滀笉涓鏍鳳細(xì)
DevCPP錛?
VS2005錛?2
8銆佷粠union鐨剆izeof闂鐪媍pu鐨勫鐣?/font>
鑰冭檻涓嬮潰闂錛氾紙榛樿瀵歸綈鏂瑰紡錛?/font>
union u
{
double a;
int b;
};
union u2
{
char a[13];
int b;
};
union u3
{
char a[13];
char b;
};
cout<<sizeof(u)<<endl; //
8
cout<<sizeof(u2)<<endl; //
16
cout<<sizeof(u3)<<endl; // 13
閮界煡閬搖nion鐨勫ぇ灝忓彇鍐充簬瀹冩墍鏈夌殑鎴愬憳涓紝鍗犵敤絀洪棿鏈澶х殑涓涓垚鍛樼殑澶у皬銆傛墍浠ュ浜巙鏉ヨ錛屽ぇ灝忓氨鏄渶澶х殑double綾誨瀷鎴愬憳a浜?jiǎn)锛屾墍浠izeof(u)=sizeof(double)=8銆備絾鏄浜巙2鍜寀3錛屾渶澶х殑絀洪棿閮芥槸char[13]綾誨瀷鐨勬暟緇勶紝涓轟粈涔坲3鐨勫ぇ灝忔槸13錛岃寀2鏄?6鍛紵鍏抽敭鍦ㄤ簬u2涓殑鎴愬憳int b銆傜敱浜巌nt綾誨瀷鎴愬憳鐨勫瓨鍦紝浣縰2鐨勫榻愭柟寮忓彉鎴?錛屼篃灝辨槸璇達(dá)紝u2鐨勫ぇ灝忓繀欏誨湪4鐨勫鐣屼笂錛屾墍浠ュ崰鐢ㄧ殑絀洪棿鍙樻垚浜?6錛堟渶鎺ヨ繎13鐨勫鐣岋級(jí)銆?/font>
緇撹錛氬鍚堟暟鎹被鍨嬶紝濡倁nion錛宻truct錛宑lass鐨勫榻愭柟寮忎負(fù)鎴愬憳涓榻愭柟寮忔渶澶х殑鎴愬憳鐨勫榻愭柟寮忋?/font>
欏轟究鎻愪竴涓婥PU瀵圭晫闂錛?2鐨凜++閲囩敤8浣嶅鐣屾潵鎻愰珮榪愯閫熷害錛屾墍浠ョ紪璇戝櫒浼?xì)灏介噺鎶婃暟鎹攽譁ㄥ畠鐨勫鐣屼笂浠ユ彁楂樺唴瀛樺懡涓巼銆傚鐣屾槸鍙互鏇存敼鐨勶紝浣跨敤#pragma pack(x)瀹忓彲浠ユ敼鍙樼紪璇戝櫒鐨勫鐣屾柟寮忥紝榛樿鏄?銆侰++鍥烘湁綾誨瀷鐨勫鐣屽彇緙栬瘧鍣ㄥ鐣屾柟寮忎笌鑷韓澶у皬涓緝?yōu)畯鐨勪竴涓備緥濡傦紝鎸囧畾緙栬瘧鍣ㄦ寜2瀵圭晫錛宨nt綾誨瀷鐨勫ぇ灝忔槸4錛屽垯int鐨勫鐣屼負(fù)2鍜?涓緝?yōu)畯鐨?銆傚湪榛樿鐨勫鐣屾柟寮忎笅錛屽洜涓哄嚑涔庢墍鏈夌殑鏁版嵁綾誨瀷閮戒笉澶т簬榛樿鐨勫鐣屾柟寮?錛堥櫎浜?jiǎn)long double錛夛紝鎵浠ユ墍鏈夌殑鍥烘湁綾誨瀷鐨勫鐣屾柟寮忓彲浠ヨ涓哄氨鏄被鍨嬭嚜韜殑澶у皬銆傛洿鏀逛竴涓嬩笂闈㈢殑紼嬪簭錛?/font>
#pragma pack(2)
union u2
{
char a[13];
int
b;
};
union u3
{
char a[13];
char b;
};
#pragma
pack(8)
cout<<sizeof(u2)<<endl; //
14
cout<<sizeof(u3)<<endl; // 13
鐢變簬鎵嬪姩鏇存敼瀵圭晫鏂瑰紡涓?錛屾墍浠nt鐨勫鐣屼篃鍙樻垚浜?錛寀2鐨勫鐣屽彇鎴愬憳涓渶澶х殑瀵圭晫錛屼篃鏄?浜?jiǎn)锛屾墍浠ユ鏃秙izeof(u2)=14銆?/font>
緇撹錛欳++鍥烘湁綾誨瀷鐨勫鐣屽彇緙栬瘧鍣ㄥ鐣屾柟寮忎笌鑷韓澶у皬涓緝?yōu)畯鐨勪竴涓?/font>
9銆乻truct鐨剆izeof闂
鍥犱負(fù)瀵歸綈闂浣跨粨鏋勪綋鐨剆izeof鍙樺緱姣旇緝澶嶆潅錛岀湅涓嬮潰鐨勪緥瀛愶細(xì)(榛樿瀵歸綈鏂瑰紡涓?
struct s1
{
char a;
double b;
int c;
char
d;
};
struct s2
{
char a;
char b;
int c;
double
d;
};
cout<<sizeof(s1)<<endl; //
24
cout<<sizeof(s2)<<endl; // 16
鍚屾牱鏄袱涓猚har綾誨瀷錛屼竴涓猧nt綾誨瀷錛屼竴涓猟ouble綾誨瀷錛屼絾鏄洜涓哄鐣岄棶棰橈紝瀵艱嚧浠栦滑鐨勫ぇ灝忎笉鍚屻傝綆楃粨鏋勪綋澶у皬鍙互閲囩敤鍏冪礌鎽嗘斁娉曪紝鎴戜婦渚嬪瓙璇存槑涓涓嬶細(xì)棣栧厛錛孋PU鍒ゆ柇緇撴瀯浣撶殑瀵圭晫錛屾牴鎹笂涓鑺傜殑緇撹錛宻1鍜宻2鐨勫鐣岄兘鍙栨渶澶х殑鍏冪礌綾誨瀷錛屼篃灝辨槸double綾誨瀷鐨勫鐣?銆傜劧鍚庡紑濮嬫憜鏀炬瘡涓厓绱犮?br> 瀵逛簬s1錛岄鍏堟妸a鏀懼埌8鐨勫鐣岋紝鍋囧畾鏄?錛屾鏃朵笅涓涓┖闂茬殑鍦板潃鏄?錛屼絾鏄笅涓涓厓绱燿鏄痙ouble綾誨瀷錛岃鏀懼埌8鐨勫鐣屼笂錛岀1鏈鎺ヨ繎鐨勫湴鍧鏄?浜?jiǎn)锛屾墍浠琚斁鍦ㄤ簡(jiǎn)8錛屾鏃朵笅涓涓┖闂插湴鍧鍙樻垚浜?6錛屼笅涓涓厓绱燾鐨勫鐣屾槸4錛?6鍙互婊¤凍錛屾墍浠鏀懼湪浜?6錛屾鏃朵笅涓涓┖闂插湴鍧鍙樻垚浜?0錛屼笅涓涓厓绱燿闇瑕佸鐣?錛屼篃姝eソ钀藉湪瀵圭晫涓婏紝鎵浠鏀懼湪浜?0錛岀粨鏋勪綋鍦ㄥ湴鍧21澶勭粨鏉熴傜敱浜巗1鐨勫ぇ灝忛渶瑕佹槸8鐨勫嶆暟錛屾墍浠?1-23鐨勭┖闂磋淇濈暀錛宻1鐨勫ぇ灝忓彉鎴愪簡(jiǎn)24銆?br> 瀵逛簬s2錛岄鍏堟妸a鏀懼埌8鐨勫鐣岋紝鍋囧畾鏄?錛屾鏃朵笅涓涓┖闂插湴鍧鏄?錛屼笅涓涓厓绱犵殑瀵圭晫涔熸槸1錛屾墍浠鎽嗘斁鍦?錛屼笅涓涓┖闂插湴鍧鍙樻垚浜?錛涗笅涓涓厓绱燾鐨勫鐣屾槸4錛屾墍浠ュ彇紱?鏈榪戠殑鍦板潃4鎽嗘斁c錛屼笅涓涓┖闂插湴鍧鍙樻垚浜?錛屼笅涓涓厓绱燿鐨勫鐣屾槸8錛屾墍浠鎽嗘斁鍦?錛屾墍鏈夊厓绱犳憜鏀懼畬姣曪紝緇撴瀯浣撳湪15澶勭粨鏉燂紝鍗犵敤鎬葷┖闂翠負(fù)16錛屾濂芥槸8鐨勫嶆暟銆?/font>
榪欓噷鏈変釜闄烽槺錛屽浜庣粨鏋勪綋涓殑緇撴瀯浣撴垚鍛橈紝涓嶈璁や負(fù)瀹冪殑瀵歸綈鏂瑰紡灝辨槸浠栫殑澶у皬錛岀湅涓嬮潰鐨勪緥瀛愶細(xì)
struct s1
{
char a[8];
};
struct s2
{
double d;
};
struct s3
{
s1 s;
char a;
};
struct s4
{
s2 s;
char a;
};
cout<<sizeof(s1)<<endl; //
8
cout<<sizeof(s2)<<endl; //
8
cout<<sizeof(s3)<<endl; //
9
cout<<sizeof(s4)<<endl; // 16;
s1鍜宻2澶у皬铏界劧閮芥槸8錛屼絾鏄痵1鐨勫榻愭柟寮忔槸1錛宻2鏄?錛坉ouble錛夛紝鎵浠ュ湪s3鍜宻4涓墠鏈夎繖鏍風(fēng)殑宸紓銆?/font>
鎵浠ワ紝鍦ㄨ嚜宸卞畾涔夌粨鏋勪綋鐨勬椂鍊欙紝濡傛灉絀洪棿绱у紶鐨勮瘽錛屾渶濂借冭檻瀵歸綈鍥犵礌鏉ユ帓鍒楃粨鏋勪綋閲岀殑鍏冪礌銆?/font>
10銆佷笉瑕佽double騫叉壈浣犵殑浣嶅煙
鍦ㄧ粨鏋勪綋鍜岀被涓紝鍙互浣跨敤浣嶅煙鏉ヨ瀹氭煇涓垚鍛樻墍鑳藉崰鐢ㄧ殑絀洪棿錛屾墍浠ヤ嬌鐢ㄤ綅鍩熻兘鍦ㄤ竴瀹氱▼搴︿笂鑺傜渷緇撴瀯浣撳崰鐢ㄧ殑絀洪棿銆備笉榪囪冭檻涓嬮潰鐨勪唬鐮侊細(xì)
struct s1
{
int i: 8;
int j: 4;
double
b;
int a:3;
};
struct s2
{
int i;
int j;
double b;
int
a;
};
struct s3
{
int i;
int j;
int a;
double
b;
};
struct s4
{
int i: 8;
int j: 4;
int
a:3;
double b;
};
cout<<sizeof(s1)<<endl; //
24
cout<<sizeof(s2)<<endl; //
24
cout<<sizeof(s3)<<endl; //
24
cout<<sizeof(s4)<<endl; // 16
鍙互鐪嬪埌錛屾湁double瀛樺湪浼?xì)骞叉秹鍒颁綅鍩熷Q坰izeof鐨勭畻娉曞弬鑰冧笂涓鑺傦級(jí)錛屾墍浠ヤ嬌鐢ㄤ綅鍩熺殑鐨勬椂鍊欙紝鏈濂芥妸float綾誨瀷鍜宒ouble綾誨瀷鏀懼湪紼嬪簭鐨勫紑濮嬫垨鑰呮渶鍚庛?/font>
絎竴嬈″啓涓滆タ錛屽彂鐜拌嚜宸辯殑琛ㄨ揪鑳藉姏澶樊浜?jiǎn)锛岀煡閬撶殑涓滆タ璁蹭笉鍑烘潵锛岃鍑烘潵鐨勪笢瑗垮埆錆h涔熺湅涓嶆噦錛屽懙鍛點(diǎn)傚彟澶栵紝C99鏍囧噯鐨剆izeof宸茬粡鍙互宸ヤ綔鍦ㄨ繍琛屾椂浜?jiǎn)锛屾墦绠楁渶榪戞壘涓敮鎸丆99鐨勭紪璇戝櫒鐮旂┒涓涓嬨?/font>