锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
BOOL涓篿nt鍨?
bool涓哄竷?yōu)當(dāng)鍨?
2銆侀暱搴︿笉鍚?
bool鍙湁涓涓瓧鑺?
BOOL闀垮害瑙嗗疄闄呯幆澧冩潵瀹氾紝涓鑸彲璁や負(fù)鏄?涓瓧鑺?
3銆佸彇鍊間笉鍚?
bool鍙栧糵alse鍜宼rue錛屾槸0鍜?鐨勫尯鍒?
BOOL鍙栧糉ALSE鍜孴RUE錛屾槸0鍜岄潪0鐨勫尯鍒?
浜岋細(xì)
bool鏄爣鍑咰++鏁版嵁綾誨瀷錛屽彲鍙栧紅rue鍜宖alse銆傚崟鐙崰涓涓瓧鑺傦紝
濡傛灉鏁頒釜bool瀵硅薄鍒楀湪涓璧鳳紝鍙兘浼?xì)鍚勫崰涓涓猙it錛岃繖鍙栧喅浜庣紪璇戝櫒銆?
BOOL鏄井杞畾涔夌殑typedef int BOOL銆備笌bool涓嶅悓錛屽畠鏄竴涓笁鍊奸昏緫錛?
TRUE/FALSE/ERROR錛岃繑鍥炲間負(fù)>0鐨勬暣鏁頒負(fù)TRUE錛?涓篎ALSE錛?1涓篍RROR銆?
Win32 API涓緢澶氳繑鍥炲間負(fù)BOOL鐨勫嚱鏁伴兘鏄笁鍊奸昏緫銆傛瘮濡侴etMessage().
涓夛細(xì)
澶OOL鍜屽皬bool涔嬮棿鐨勫尯鍒細(xì)
1銆佺被鍨嬩笉鍚?
BOOL涓篿nt鍨?
bool涓哄竷?yōu)當(dāng)鍨?
2銆侀暱搴︿笉鍚?
bool鍙湁涓涓瓧鑺?
BOOL闀垮害瑙嗗疄闄呯幆澧冩潵瀹氾紝涓鑸彲璁や負(fù)鏄?涓瓧鑺?
3銆佸彇鍊間笉鍚?
bool鍙栧糵alse鍜宼rue錛屾槸0鍜?鐨勫尯鍒?
BOOL鍙栧糉ALSE鍜孴RUE錛屾槸0鍜岄潪0鐨勫尯鍒?
4銆佷緥瀛?
bool x=3; //鍛婅
bool x=1; //姝g‘
BOOL x=3; //姝g‘
BOOL x=3.3; //鍛婅
娉細(xì)windows涓轟簡鍏煎闂瀹氫箟鐨勫熀紜鍙橀噺銆?
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BOOL near *PBOOL;
typedef BOOL far *LPBOOL;
typedef BYTE near *PBYTE;
typedef BYTE far *LPBYTE;
typedef int near *PINT;
typedef int far *LPINT;
]]>
]]>
鍝簺鍙橀噺浼?xì)鍦ㄦ爤涓垎閰嵔I洪棿錛屽摢浜涘彉閲忎細(xì)鍦ㄥ爢涓垎閰嶇┖闂?/span>?
---------------------------------------------------------------
1銆?span style="COLOR: maroon">鐢寵鏂瑰紡
stack:
鐢辯郴緇?span style="COLOR: red">鑷姩鍒嗛厤銆?/span> 渚嬪錛屽0鏄庡湪鍑芥暟涓竴涓眬閮ㄥ彉閲?/span> int b; 緋葷粺鑷姩鍦ㄦ爤涓負(fù)b寮杈熺┖闂?/span>
heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓?/span>malloc鍑芥暟
濡?/span>p1 = (char *)malloc(10); //free
鍦?/span>C++涓敤new榪愮畻絎?/span> //delete
濡?/span>p2 = (char *)malloc(10);
浣嗘槸娉ㄦ剰p1銆?/span>p2鏈韓鏄湪鏍堜腑鐨勩?/span>
2銆?span style="COLOR: maroon">鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細(xì)鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑?/span>銆?/span>
鍫嗭細(xì)棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓?span style="COLOR: red">璁板綍絀洪棽鍐呭瓨鍦板潃鐨勯摼琛?/span>錛屽綋緋葷粺鏀跺埌紼嬪簭鐨勭敵璇鋒椂錛?/span>
浼?xì)閬嶅巻璇ラ摼琛ㄥQ屽鎵劇涓涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細(xì)鍦ㄨ繖鍧楀唴瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風(fēng)殑澶у皬錛岀郴緇熶細(xì)鑷姩鐨勫皢澶氫綑鐨勯偅閮ㄥ垎閲嶆柊鏀懼叆絀洪棽閾捐〃涓?/span>
3銆?span style="COLOR: maroon">鐢寵澶у皬鐨勯檺鍒?/span>
鏍堬細(xì)鍦?/span>Windows涓?/span>,鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪WINDOWS涓嬶紝鏍堢殑澶у皬鏄?/span>
鍫嗭細(xì)鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍鐨勭┖闂插唴瀛樺湴鍧鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶?/span>銆?/span>
4銆?span style="COLOR: maroon">鐢寵鏁堢巼鐨勬瘮杈冿細(xì)
鏍堢敱緋葷粺鑷姩鍒嗛厤錛?span style="COLOR: red">閫熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?/span>
鍫嗘槸鐢?/span>new鍒嗛厤鐨勫唴瀛?/span>錛屼竴鑸?span style="COLOR: red">閫熷害姣旇緝鎱?/span>錛岃屼笖瀹規(guī)槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿銆?/span>
5銆?span style="COLOR: maroon">鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?/span>
鏍堬細(xì)鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨?/span>C緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?/span>
褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?/span>
鍫嗭細(xì)涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?/span>
6銆?span style="COLOR: maroon">瀛樺彇鏁堢巼鐨勬瘮杈?/span>
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?/span>
鑰?/span>bbbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?/span>)蹇?/span>
姣斿錛?/span>
#include
void main() 
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細(xì)
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨璧幫紝涓嶅繀鐞嗕細(xì)鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜鐢卞害灝忋?/span>
static 澹版槑鐨勫彉閲忓湪C璇█涓湁涓ゆ柟闈?/span>鐨勭壒寰侊細(xì)
銆銆1)銆佸彉閲忎細(xì)琚斁鍦ㄧ▼搴忕殑鍏ㄥ眬瀛樺偍鍖?/span>涓紝榪欐牱鍙互鍦ㄤ笅涓嬈¤皟鐢ㄧ殑鏃跺欒繕鍙互淇濇寔鍘熸潵鐨勮祴鍊?/span>銆傝繖涓鐐規(guī)槸瀹冧笌鍫嗘爤鍙橀噺鍜屽爢鍙橀噺鐨勫尯鍒?/span>
銆銆2)銆佸彉閲忕敤static鍛婄煡緙栬瘧鍣紝鑷繁浠呬粎鍦ㄥ彉閲忕殑浣滅敤鑼冨洿鍐呭彲瑙?/span>銆傝繖涓鐐規(guī)槸瀹冧笌鍏ㄥ眬鍙橀噺鐨勫尯鍒?/span>
Tips:
銆銆A.鑻ュ叏灞鍙橀噺浠呭湪鍗曚釜C鏂囦歡涓闂紝鍒欏彲浠ュ皢榪欎釜鍙橀噺淇敼涓洪潤鎬佸叏灞鍙橀噺錛屼互闄嶄綆妯″潡闂寸殑鑰﹀悎搴︼紱
銆銆B.鑻ュ叏灞鍙橀噺浠呯敱鍗曚釜鍑芥暟璁塊棶錛屽垯鍙互灝嗚繖涓彉閲忔敼涓鴻鍑芥暟鐨勯潤鎬佸眬閮ㄥ彉閲忥紝浠ラ檷浣庢ā鍧楅棿鐨勮﹀悎搴︼紱
銆銆C.璁捐鍜屼嬌鐢ㄨ闂姩鎬佸叏灞鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忕殑鍑芥暟鏃訛紝闇瑕佽冭檻閲嶅叆闂錛?/span>
D.濡傛灉鎴戜滑闇瑕佷竴涓彲閲嶅叆鐨勫嚱鏁幫紝閭d箞錛屾垜浠竴瀹氳閬垮厤鍑芥暟涓嬌鐢?/span>static鍙橀噺(榪欐牱鐨勫嚱鏁拌縐頒負(fù)錛氬甫“鍐呴儴瀛樺偍鍣?/span>”鍔熻兘鐨勭殑鍑芥暟)
E.鍑芥暟涓繀欏昏浣跨敤static鍙橀噺鎯呭喌:姣斿褰撴煇鍑芥暟鐨勮繑鍥炲間負(fù)鎸囬拡綾誨瀷鏃訛紝鍒欏繀欏繪槸static鐨勫眬閮ㄥ彉閲忕殑鍦板潃浣滀負(fù)榪斿洖鍊鹼紝鑻ヤ負(fù)auto綾誨瀷錛屽垯榪斿洖涓洪敊鎸囬拡銆?/span>
鍑芥暟鍓嶅姞static浣垮緱鍑芥暟鎴愪負(fù)闈欐佸嚱鏁?/span>銆備絾姝ゅ“static”鐨勫惈涔?span style="COLOR: red">涓嶆槸鎸囧瓨鍌ㄦ柟寮?/span>錛岃屾槸鎸囧鍑芥暟鐨?span style="COLOR: red">浣滅敤鍩熶粎灞闄愪簬鏈枃浠?/span>(鎵浠ュ張縐板唴閮ㄥ嚱鏁?/span>)銆備嬌鐢ㄥ唴閮ㄥ嚱鏁扮殑濂藉鏄細(xì)涓嶅悓鐨勪漢緙栧啓涓嶅悓鐨勫嚱鏁版椂錛屼笉鐢ㄦ媴蹇冭嚜宸卞畾涔夌殑鍑芥暟錛屾槸鍚︿細(xì)涓庡叾瀹冩枃浠朵腑鐨勫嚱鏁板悓鍚嶃?/span>
鎵╁睍鍒嗘瀽:鏈static鏈夌潃涓嶅甯哥殑鍘嗗彶.璧峰垵錛屽湪C涓紩鍏ュ叧閿瓧static鏄負(fù)浜嗚〃紺洪鍑轟竴涓潡鍚庝粛鐒跺瓨鍦ㄧ殑灞閮ㄥ彉閲忋傞殢鍚庯紝static鍦?/span>C涓湁浜嗙浜岀鍚箟錛氱敤鏉ヨ〃紺轟笉鑳借鍏跺畠鏂囦歡璁塊棶鐨勫叏灞鍙橀噺鍜屽嚱鏁般備負(fù)浜嗛伩鍏嶅紩鍏ユ柊鐨勫叧閿瓧錛屾墍浠ヤ粛浣跨敤static鍏抽敭瀛楁潵琛ㄧず榪欑浜岀鍚箟銆傛渶鍚庯紝C++閲嶇敤浜嗚繖涓叧閿瓧錛屽茍璧嬩簣瀹冧笌鍓嶉潰涓嶅悓鐨勭涓夌鍚箟錛氳〃紺哄睘浜庝竴涓被鑰屼笉鏄睘浜庢綾葷殑浠諱綍鐗瑰畾瀵硅薄鐨勫彉閲忓拰鍑芥暟(涓?/span>Java涓鍏抽敭瀛楃殑鍚箟鐩稿悓)銆?/span>
鍏ㄥ眬鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忓拰灞閮ㄥ彉閲忕殑鍖哄埆
鍙橀噺鍙互鍒嗕負(fù)錛氬叏灞鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忓拰灞閮ㄥ彉閲忋?/span>
鎸?span style="COLOR: red">瀛樺偍鍖哄煙鍒嗭紝鍏ㄥ眬鍙橀噺銆侀潤鎬佸叏灞鍙橀噺鍜岄潤鎬佸眬閮ㄥ彉閲忛兘瀛樻斁鍦ㄥ唴瀛樼殑闈欐佸瓨鍌ㄥ尯鍩?/span>錛屽眬閮ㄥ彉閲忓瓨鏀懼湪鍐呭瓨鐨?span style="COLOR: red">鏍堝尯銆?/span>
鎸?span style="COLOR: red">浣滅敤鍩?/span>鍒嗭紝鍏ㄥ眬鍙橀噺鍦ㄦ暣涓伐紼嬫枃浠跺唴閮芥湁鏁堬紱闈欐佸叏灞鍙橀噺鍙湪瀹氫箟瀹冪殑鏂囦歡鍐呮湁鏁堬紱闈欐佸眬閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫嚱鏁板唴鏈夋晥錛屽彧鏄▼搴忎粎鍒嗛厤涓嬈″唴瀛橈紝鍑芥暟榪斿洖鍚庯紝璇ュ彉閲忎笉浼?xì)娑堝け锛涘眬閮ㄥ彉閲忓湪瀹氫箟瀹冪殑鍑芥暟鍐呮湁鏁堬紝浣嗘槸鍑芥暟榪斿洖鍚庡け鏁?/span>銆?/span>
鍏ㄥ眬鍙橀噺(澶栭儴鍙橀噺)鐨勮鏄庝箣鍓嶅啀鍐犱互static 灝辨瀯鎴愪簡闈欐佺殑鍏ㄥ眬鍙橀噺銆傚叏灞鍙橀噺鏈韓灝辨槸闈欐佸瓨鍌ㄦ柟寮忥紝 闈欐佸叏灞鍙橀噺褰撶劧涔熸槸闈欐佸瓨鍌ㄦ柟寮忋?/span> 榪欎袱鑰呭湪瀛樺偍鏂瑰紡涓婂茍鏃犱笉鍚屻傝繖涓よ呯殑鍖哄埆铏藉湪浜庨潪闈欐佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙鏄暣涓簮紼嬪簭錛?/span> 褰撲竴涓簮紼嬪簭鐢卞涓簮鏂囦歡緇勬垚鏃訛紝闈為潤鎬佺殑鍏ㄥ眬鍙橀噺鍦ㄥ悇涓簮鏂囦歡涓兘鏄湁鏁堢殑銆?/span> 鑰岄潤鎬佸叏灞鍙橀噺鍒欓檺鍒朵簡鍏朵綔鐢ㄥ煙錛?/span> 鍗沖彧鍦ㄥ畾涔夎鍙橀噺鐨勬簮鏂囦歡鍐呮湁鏁堬紝 鍦ㄥ悓涓婧愮▼搴忕殑鍏跺畠婧愭枃浠朵腑涓嶈兘浣跨敤瀹冦傜敱浜庨潤鎬佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙灞闄愪簬涓涓簮鏂囦歡鍐咃紝鍙兘涓鴻婧愭枃浠跺唴鐨勫嚱鏁板叕鐢紝 鍥犳鍙互閬垮厤鍦ㄥ叾瀹冩簮鏂囦歡涓紩璧烽敊璇?/span>
銆銆浠庝互涓婂垎鏋愬彲浠ョ湅鍑猴紝 鎶婂眬閮ㄥ彉閲忔敼鍙樹負(fù)闈欐佸彉閲忓悗鏄敼鍙樹簡瀹冪殑瀛樺偍鏂瑰紡鍗蟲敼鍙樹簡瀹冪殑鐢熷瓨鏈?/span>銆傛妸鍏ㄥ眬鍙橀噺鏀瑰彉涓洪潤鎬佸彉閲忓悗鏄敼鍙樹簡瀹冪殑浣滅敤鍩?/span>錛?/span> 闄愬埗浜嗗畠鐨勪嬌鐢ㄨ寖鍥淬?/span>
銆銆static鍑芥暟涓庢櫘閫氬嚱鏁頒綔鐢ㄥ煙涓嶅悓銆?span style="COLOR: red">浠呭湪鏈枃浠躲傚彧鍦ㄥ綋鍓嶆簮鏂囦歡涓嬌鐢ㄧ殑鍑芥暟搴旇璇存槑涓哄唴閮ㄥ嚱鏁?/span>(static)錛屽唴閮ㄥ嚱鏁板簲璇ュ湪褰撳墠婧愭枃浠朵腑璇存槑鍜屽畾涔夈傚浜庡彲鍦ㄥ綋鍓嶆簮鏂囦歡浠ュ浣跨敤鐨勫嚱鏁幫紝搴旇鍦ㄤ竴涓ご鏂囦歡涓鏄庯紝瑕佷嬌鐢ㄨ繖浜涘嚱鏁扮殑婧愭枃浠惰鍖呭惈榪欎釜澶存枃浠?/span>
銆銆static鍏ㄥ眬鍙橀噺涓庢櫘閫氱殑鍏ㄥ眬鍙橀噺鏈変粈涔堝尯鍒細(xì)static鍏ㄥ眬鍙橀噺鍙垵濮嬪寲涓嬈★紝闃叉鍦ㄥ叾浠栨枃浠跺崟鍏冧腑琚紩鐢?/span>;
銆銆static灞閮ㄥ彉閲忓拰鏅氬眬閮ㄥ彉閲忔湁浠涔堝尯鍒細(xì)static灞閮ㄥ彉閲忓彧琚垵濮嬪寲涓嬈★紝涓嬩竴嬈′緷鎹笂涓嬈$粨鏋滃鹼紱
static鍑芥暟涓庢櫘閫氬嚱鏁版湁浠涔堝尯鍒細(xì)static鍑芥暟鍦ㄥ唴瀛樹腑鍙湁涓浠斤紝鏅氬嚱鏁板湪姣忎釜琚皟鐢ㄤ腑緇存寔涓浠芥嫹璐?/span>
鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忓鏋滄病鏈夋墜宸ュ垵濮嬪寲錛?span style="COLOR: red">鍒欑敱緙栬瘧鍣ㄥ垵濮嬪寲涓?/span>0銆傚眬閮ㄥ彉閲忕殑鍊間笉鍙煡銆?/span>
浣犱細(xì)鐢╯izeof鍚楋紵錛坴c綃囷級
| 鏈枃涓昏鍖呮嫭浜屼釜閮ㄥ垎錛岀涓閮ㄥ垎閲嶇偣浠嬬粛鍦╒C涓紝鎬庝箞鏍烽噰鐢╯izeof鏉ユ眰緇撴瀯鐨勫ぇ灝忥紝浠ュ強(qiáng)瀹規(guī)槗鍑虹幇鐨勯棶棰橈紝騫剁粰鍑鴻В鍐抽棶棰樼殑鏂規(guī)硶錛岀浜岄儴鍒嗘葷粨鍑篤C涓璼izeof鐨勪富瑕佺敤娉曘?br> 1銆?sizeof搴旂敤鍦ㄧ粨鏋勪笂鐨勬儏鍐?br> 璇風(fēng)湅涓嬮潰鐨勭粨鏋勶細(xì) struct MyStruct { double dda1; char dda; int type }; 瀵圭粨鏋凪yStruct閲囩敤sizeof浼?xì)鍑虹庮C粈涔堢粨鏋滃憿錛焥izeof(MyStruct)涓哄灝戝憿錛熶篃璁鎬綘浼?xì)杩欐犱h眰錛?br> sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 浣嗘槸褰撳湪VC涓祴璇曚笂闈㈢粨鏋勭殑澶у皬鏃訛紝浣犱細(xì)鍙戠幇sizeof(MyStruct)涓?6銆備綘鐭ラ亾涓轟粈涔堝湪VC涓細(xì)寰楀嚭榪欐牱涓涓粨鏋滃悧錛?br> 鍏跺疄錛岃繖鏄疺C瀵瑰彉閲忓瓨鍌ㄧ殑涓涓壒孌婂鐞嗐備負(fù)浜嗘彁楂楥PU鐨勫瓨鍌ㄩ熷害錛孷C瀵逛竴浜涘彉閲忕殑璧峰鍦板潃鍋氫簡“瀵歸綈”澶勭悊銆傚湪榛樿鎯呭喌涓嬶紝VC瑙勫畾鍚勬垚鍛樺彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺蹇呴』涓鴻鍙橀噺鐨勭被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟鐨勫嶆暟銆備笅闈㈠垪鍑哄父鐢ㄧ被鍨嬬殑瀵歸綈鏂瑰紡(vc6.0,32浣嶇郴緇?銆?br> 綾誨瀷 瀵歸綈鏂瑰紡錛堝彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺錛?br> Char 鍋忕Щ閲忓繀欏諱負(fù)sizeof(char)鍗?鐨勫嶆暟 int 鍋忕Щ閲忓繀欏諱負(fù)sizeof(int)鍗?鐨勫嶆暟 float 鍋忕Щ閲忓繀欏諱負(fù)sizeof(float)鍗?鐨勫嶆暟 double 鍋忕Щ閲忓繀欏諱負(fù)sizeof(double)鍗?鐨勫嶆暟 Short 鍋忕Щ閲忓繀欏諱負(fù)sizeof(short)鍗?鐨勫嶆暟 鍚勬垚鍛樺彉閲忓湪瀛樻斁鐨勬椂鍊欐牴鎹湪緇撴瀯涓嚭鐜扮殑欏哄簭渚濇鐢寵絀洪棿錛屽悓鏃舵寜鐓т笂闈㈢殑瀵歸綈鏂瑰紡璋冩暣浣嶇疆錛岀┖緙虹殑瀛楄妭VC浼?xì)鑷姩濉厖銆傚悓鏃禫C涓轟簡紜繚緇撴瀯鐨勫ぇ灝忎負(fù)緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆璇ョ粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛夌殑鍊嶆暟錛屾墍浠ュ湪涓烘渶鍚庝竴涓垚鍛樺彉閲忕敵璇風(fēng)┖闂村悗錛岃繕浼?xì)鏍规嵁闇瑕佽嚜鍔ㄥ~鍏呯┖緙虹殑瀛楄妭銆?br> 涓嬮潰鐢ㄥ墠闈㈢殑渚嬪瓙鏉ヨ鏄嶸C鍒板簳鎬庝箞鏍鋒潵瀛樻斁緇撴瀯鐨勩?br> struct MyStruct { double dda1; char dda; int type }錛?br> 涓轟笂闈㈢殑緇撴瀯鍒嗛厤絀洪棿鐨勬椂鍊欙紝VC鏍規(guī)嵁鎴愬憳鍙橀噺鍑虹幇鐨勯『搴忓拰瀵歸綈鏂瑰紡錛屽厛涓虹涓涓垚鍛榙da1鍒嗛厤絀洪棿錛屽叾璧峰鍦板潃璺熺粨鏋勭殑璧峰鍦板潃鐩稿悓錛堝垰濂藉亸縐婚噺0鍒氬ソ涓簊izeof(double)鐨勫嶆暟錛夛紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(double)=8涓瓧鑺傦紱鎺ヤ笅鏉ヤ負(fù)絎簩涓垚鍛榙da鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屾槸sizeof(char)鐨勫嶆暟錛屾墍浠ユ妸dda瀛樻斁鍦ㄥ亸縐婚噺涓?鐨勫湴鏂規(guī)弧瓚沖榻愭柟寮忥紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(char)=1涓瓧鑺傦紱鎺ヤ笅鏉ヤ負(fù)絎笁涓垚鍛榯ype鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof(int)=4鐨勫嶆暟錛屼負(fù)浜嗘弧瓚沖榻愭柟寮忓鍋忕Щ閲忕殑綰︽潫闂錛孷C鑷姩濉厖3涓瓧鑺傦紙榪欎笁涓瓧鑺傛病鏈夋斁浠涔堜笢瑗匡級錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?2錛屽垰濂芥槸sizeof(int)=4鐨勫嶆暟錛屾墍浠ユ妸type瀛樻斁鍦ㄥ亸縐婚噺涓?2鐨勫湴鏂癸紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(int)=4涓瓧鑺傦紱榪欐椂鏁翠釜緇撴瀯鐨勬垚鍛樺彉閲忓凡緇忛兘鍒嗛厤浜嗙┖闂達(dá)紝鎬葷殑鍗犵敤鐨勭┖闂村ぇ灝忎負(fù)錛?+1+3+4=16錛屽垰濂戒負(fù)緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆緇撴瀯涓崰鐢ㄦ渶澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof(double)=8錛夌殑鍊嶆暟錛屾墍浠ユ病鏈夌┖緙虹殑瀛楄妭闇瑕佸~鍏呫傛墍浠ユ暣涓粨鏋勭殑澶у皬涓猴細(xì)sizeof(MyStruct)=8+1+3+4=16錛屽叾涓湁3涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?br> 涓嬮潰鍐嶄婦涓緥瀛愶紝浜ゆ崲涓涓嬩笂闈㈢殑MyStruct鐨勬垚鍛樺彉閲忕殑浣嶇疆錛屼嬌瀹冨彉鎴愪笅闈㈢殑鎯呭喌錛?br> struct MyStruct { char dda; double dda1; int type }錛?br> 榪欎釜緇撴瀯鍗犵敤鐨勭┖闂翠負(fù)澶氬ぇ鍛紵鍦╒C6.0鐜涓嬶紝鍙互寰楀埌sizeof(MyStruc)涓?4銆傜粨鍚堜笂闈㈡彁鍒扮殑鍒嗛厤絀洪棿鐨勪竴浜涘師鍒欙紝鍒嗘瀽涓媀C鎬庝箞鏍蜂負(fù)涓婇潰鐨勭粨鏋勫垎閰嶇┖闂寸殑銆傦紙綆鍗曡鏄庯級 struct MyStruct { char dda;//鍋忕Щ閲忎負(fù)0錛屾弧瓚沖榻愭柟寮忥紝dda鍗犵敤1涓瓧鑺傦紱 double dda1;//涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof(double)=8 //鐨勫嶆暟錛岄渶瑕佽ˉ瓚?涓瓧鑺傛墠鑳戒嬌鍋忕Щ閲忓彉涓?錛堟弧瓚沖榻?br> //鏂瑰紡錛夛紝鍥犳VC鑷姩濉厖7涓瓧鑺傦紝dda1瀛樻斁鍦ㄥ亸縐婚噺涓? //鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?br> int type錛?/涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?6錛屾槸sizeof(int)=4鐨勫?br> //鏁幫紝婊¤凍int鐨勫榻愭柟寮忥紝鎵浠ヤ笉闇瑕乂C鑷姩濉厖錛宼ype瀛?br> //鏀懼湪鍋忕Щ閲忎負(fù)16鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?br> }錛?/鎵鏈夋垚鍛樺彉閲忛兘鍒嗛厤浜嗙┖闂達(dá)紝絀洪棿鎬葷殑澶у皬涓?+7+8+4=20錛屼笉鏄粨鏋?br> //鐨勮妭杈圭晫鏁幫紙鍗崇粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof //(double)=8錛夌殑鍊嶆暟錛屾墍浠ラ渶瑕佸~鍏?涓瓧鑺傦紝浠ユ弧瓚崇粨鏋勭殑澶у皬涓?br> //sizeof(double)=8鐨勫嶆暟銆?br> 鎵浠ヨ緇撴瀯鎬葷殑澶у皬涓猴細(xì)sizeof(MyStruc)涓?+7+8+4+4=24銆傚叾涓葷殑鏈?+4=11涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?br> VC瀵圭粨鏋勭殑瀛樺偍鐨勭壒孌婂鐞嗙‘瀹炴彁楂楥PU瀛樺偍鍙橀噺鐨勯熷害錛屼絾鏄湁鏃跺欎篃甯︽潵浜嗕竴浜涢夯鐑︼紝鎴戜滑涔熷睆钄芥帀鍙橀噺榛樿鐨勫榻愭柟寮忥紝鑷繁鍙互璁懼畾鍙橀噺鐨勫榻愭柟寮忋?br> VC涓彁渚涗簡#pragma pack(n)鏉ヨ瀹氬彉閲忎互n瀛楄妭瀵歸綈鏂瑰紡銆俷瀛楄妭瀵歸綈灝辨槸璇村彉閲忓瓨鏀劇殑璧峰鍦板潃鐨勫亸縐婚噺鏈変袱縐嶆儏鍐碉細(xì)絎竴銆佸鏋渘澶т簬絳変簬璇ュ彉閲忔墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺蹇呴』婊¤凍榛樿鐨勫榻愭柟寮忥紝絎簩銆佸鏋渘灝忎簬璇ュ彉閲忕殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺涓簄鐨勫嶆暟錛屼笉鐢ㄦ弧瓚抽粯璁ょ殑瀵歸綈鏂瑰紡銆傜粨鏋勭殑鎬誨ぇ灝忎篃鏈変釜綰︽潫鏉′歡錛屽垎涓嬮潰涓ょ鎯呭喌錛氬鏋渘澶т簬鎵鏈夋垚鍛樺彉閲忕被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堢粨鏋勭殑鎬誨ぇ灝忓繀欏諱負(fù)鍗犵敤絀洪棿鏈澶х殑鍙橀噺鍗犵敤鐨勭┖闂存暟鐨勫嶆暟錛?br> 鍚﹀垯蹇呴』涓簄鐨勫嶆暟銆備笅闈婦渚嬭鏄庡叾鐢ㄦ硶銆?br> #pragma pack(push) //淇濆瓨瀵歸綈鐘舵?br> #pragma pack(4)//璁懼畾涓?瀛楄妭瀵歸綈 struct test { char m1; double m4; int m3; }; #pragma pack(pop)//鎭㈠瀵歸綈鐘舵?br> 浠ヤ笂緇撴瀯鐨勫ぇ灝忎負(fù)16錛屼笅闈㈠垎鏋愬叾瀛樺偍鎯呭喌錛岄鍏堜負(fù)m1鍒嗛厤絀洪棿錛屽叾鍋忕Щ閲忎負(fù)0錛屾弧瓚蟲垜浠嚜宸辮瀹氱殑瀵歸綈鏂瑰紡錛?瀛楄妭瀵歸綈錛夛紝m1鍗犵敤1涓瓧鑺傘傛帴鐫寮濮嬩負(fù)m4鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負(fù)1錛岄渶瑕佽ˉ瓚?涓瓧鑺傦紝榪欐牱浣垮亸縐婚噺婊¤凍涓簄=4鐨勫嶆暟錛堝洜涓簊izeof(double)澶т簬n錛?m4鍗犵敤8涓瓧鑺傘傛帴鐫涓簃3鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負(fù)12錛屾弧瓚充負(fù)4鐨勫嶆暟錛宮3鍗犵敤4涓瓧鑺傘傝繖鏃跺凡緇忎負(fù)鎵鏈夋垚鍛樺彉閲忓垎閰嶄簡絀洪棿錛屽叡鍒嗛厤浜?6涓瓧鑺傦紝婊¤凍涓簄鐨勫嶆暟銆傚鏋滄妸涓婇潰鐨?pragma pack(4)鏀逛負(fù)#pragma pack(16)錛岄偅涔堟垜浠彲浠ュ緱鍒扮粨鏋勭殑澶у皬涓?4銆傦紙璇瘋鑰呰嚜宸卞垎鏋愶級 2銆?sizeof鐢ㄦ硶鎬葷粨 鍦╒C涓紝sizeof鏈夌潃璁稿鐨勭敤娉曪紝鑰屼笖寰堝鏄撳紩璧蜂竴浜涢敊璇備笅闈㈡牴鎹畇izeof鍚庨潰鐨勫弬鏁板sizeof鐨勭敤娉曞仛涓葷粨銆?br> A錛?鍙傛暟涓烘暟鎹被鍨嬫垨鑰呬負(fù)涓鑸彉閲忋備緥濡俿izeof(int),sizeof(long)絳夌瓑銆傝繖縐嶆儏鍐佃娉ㄦ剰鐨勬槸涓嶅悓緋葷粺緋葷粺鎴栬呬笉鍚岀紪璇戝櫒寰楀埌鐨勭粨鏋滃彲鑳芥槸涓嶅悓鐨勩備緥濡俰nt綾誨瀷鍦?6浣嶇郴緇熶腑鍗?涓瓧鑺傦紝鍦?2浣嶇郴緇熶腑鍗?涓瓧鑺傘?br> B錛?鍙傛暟涓烘暟緇勬垨鎸囬拡銆備笅闈婦渚嬭鏄? int a[50]; //sizeof(a)=4*50=200; 姹傛暟緇勬墍鍗犵殑絀洪棿澶у皬 int *a=new int[50];// sizeof(a)=4; a涓轟竴涓寚閽堬紝sizeof(a)鏄眰鎸囬拡 //鐨勫ぇ灝?鍦?2浣嶇郴緇熶腑錛屽綋鐒舵槸鍗?涓瓧鑺傘?br> C錛?鍙傛暟涓虹粨鏋勬垨綾匯係izeof搴旂敤鍦ㄧ被鍜岀粨鏋勭殑澶勭悊鎯呭喌鏄浉鍚岀殑銆備絾鏈変袱鐐歸渶瑕佹敞鎰忥紝絎竴銆佺粨鏋勬垨鑰呯被涓殑闈欐佹垚鍛樹笉瀵圭粨鏋勬垨鑰呯被鐨勫ぇ灝忎駭鐢熷獎(jiǎng)鍝嶏紝鍥犱負(fù)闈欐佸彉閲忕殑瀛樺偍浣嶇疆涓庣粨鏋勬垨鑰呯被鐨勫疄渚嬪湴鍧鏃犲叧銆?br> 絎簩銆佹病鏈夋垚鍛樺彉閲忕殑緇撴瀯鎴栫被鐨勫ぇ灝忎負(fù)1錛屽洜涓哄繀欏諱繚璇佺粨鏋勬垨綾葷殑姣忎竴 涓疄渚嬪湪鍐呭瓨涓兘鏈夊敮涓鐨勫湴鍧銆?br> 涓嬮潰涓句緥璇存槑錛?br> Class Test{int a;static double c};//sizeof(Test)=4. Test *s;//sizeof(s)=4,s涓轟竴涓寚閽堛?br> Class test1{ };//sizeof(test1)=1; D錛?鍙傛暟涓哄叾浠栥備笅闈婦渚嬭鏄庛?br> int func(char s[5]); { cout< //鏁扮殑鍙傛暟鍦ㄤ紶閫掔殑鏃跺欑郴緇熷鐞嗕負(fù)涓涓寚閽堬紝鎵 //浠izeof(s)瀹為檯涓婁負(fù)姹傛寚閽堢殑澶у皬銆?br> return 1; } sizeof(func(“1234”))=4//鍥犱負(fù)func鐨勮繑鍥炵被鍨嬩負(fù)int錛屾墍浠ョ浉褰撲簬 //姹俿izeof(int). 浠ヤ笂涓簊izeof鐨勫熀鏈敤娉曪紝鍦ㄥ疄闄呯殑浣跨敤涓娉ㄦ剰鍒嗘瀽VC鐨勫垎閰嶅彉閲忕殑鍒嗛厤絳栫暐錛岃繖鏍風(fēng)殑璇濆彲浠ラ伩鍏嶄竴浜涢敊璇?/td> |
姣忎釜綾誨瀷鍦ㄧ紪璇戞椂閮戒細(xì)鍐沖畾鑷繁鐨勫疄渚嬮渶瑕佸灝戝瓧鑺傘傚湪緙栬瘧鍚庯紝璇ョ被鍨嬬殑鎵鏈夊璞″崰鏈夌殑絀洪棿鏄竴鏍風(fēng)殑錛屼笉浼?xì)鍙戠敓鍙樺寲銆傚洜姝わ紝鎴戜滑鍙互鐢╯izeof鏉ヨ綆椾竴涓被鍨嬫垨鑰呰綾誨瀷鐨勬煇涓疄渚嬫潵寰楀埌灝哄淇℃伅銆備笅闈㈢殑浠g爜鏄瓑浠風(fēng)殑

int iVal;
//sizeof type
sizeof(int)
//sizeof instance
sizeof(iVal)
鏃犺鎴戜滑鐢╥Val榪樻槸int錛屼笂闈㈢殑琛ㄨ揪寮忛兘浼?xì)杩斿洖int綾誨瀷鐨勫昂瀵革紙褰撶劧濡傚墠鎵璇達(dá)紝iVal鐨勫昂瀵稿拰鍏剁被鍨嬪昂瀵告案榪滄槸涓鏍風(fēng)殑)銆?/p>
涓嶇啛鎮(zhèn)塻izeof鐨勬湅鍙嬪線寰浼?xì)鍦ㄥ鐞嗘寚閽堟椂寮勯敊姒傚奎c(diǎn)傝冭檻涓嬮潰浠g爜錛?/p>
int iArray[10];
int sizeofArray=sizeof(iArray);
int * p= new int[10];
int sizeofPointer = sizeof(p);鍦ㄥ緢澶氫漢蹇冪洰涓紝鎸囬拡鍜屾暟緇勬槸絳変環(huán)鐨勶紝浣嗘槸浜嬪疄涓ユ牸璧鋒潵騫朵笉濡傛銆備笂闈㈢殑浠g爜灝變細(xì)榪斿洖涓嶅悓鐨勭粨鏋溿?/p>
瀵逛簬iArray錛屽畠鐨勭被鍨嬫槸int[10]錛屾槸涓涓暟緇勶紝sizeof璁$畻鍏跺昂瀵告椂錛岀煡閬撳畠鍖呭惈10涓厓绱狅紝姣忎釜鍏冪礌閮芥椂涓暣鍨嬶紝鍥犳榪斿洖40銆傝屽浜巔錛屽畠鐨勭被鍨嬫槸int*錛屾寚閽堢殑灝哄姘歌繙鏄?錛屽洜姝ょ粨鏋滃氨鏄?銆俿izeof涓嶄細(xì)涔熶笉鍙兘鐭ラ亾p瀹為檯鎸囧悜10涓厓绱犵殑鏁扮粍銆?/p>
鍑虹幇榪欎釜闂鐨勫師鍥犳湁涓や釜錛?. sizeof鏄湪緙栬瘧鏃惰綆楃殑錛岃宯ew int[10]鎸囧悜鐨勬暟緇勬槸鍦ㄨ繍琛屾椂鍒涘緩鐨勶紝涔熷氨鏄褰搒izeof(p)璁$畻鏃訛紝緋葷粺榪樹笉鐭ラ亾p浼?xì)鎸囧悜澶殲畱涓猧nt鍏冪礌錛岃嚜鐒朵篃涓嶅彲鑳界煡閬撳畠鎸囧悜鐨勬暟緇勫崰鏈夊灝戝瓧鑺傘?. sizeof璁$畻鐨勬槸p鑷繁鐨勭被鍨嬫墍鍗犳嵁鐨勭┖闂達(dá)紝鑰屼笉鏄痯鎸囧悜鐨勫璞℃墍鍗犳嵁鐨勭┖闂達(dá)紝鍙互璇達(dá)紝p鑷繁鍗犳嵁4涓瓧鑺傦紝鑰宲鎸囧悜鐨勭┖闂村崰40瀛楄妭銆?/p>
鍦ㄨ繖縐嶆蹇典笅錛屾垜浠槸涓嶆槸鍙互閫氳繃sizeof(*p)鏉ュ緱鍒?0鍛紵寰堜笉騫革紝涓嶈錛屽師鍥犳槸p鐨勭被鍨嬫槸int*錛?p鐨勭被鍨嬫槸int錛屽洜姝ゆ棤娉曞緱鍒板叾鏄竴涓暟緇勭殑浜嬪疄銆?/p>
瀹為檯涓婏紝榪欎釜灝哄淇℃伅鏄釜榪愯鏃舵暟鎹紝浣滀負(fù)C/C++璇█鑰岃█錛屾槸鏃犱粠鐭ラ亾榪欎釜淇℃伅鐨勶紙鍥犱負(fù)C/C++鎸囬拡涓嶅寘鍚繖縐嶄俊鎭級錛岃寰楀埌瀹冿紝鍞竴鐨勫姙娉曟槸鎸囨湜鎿嶄綔緋葷粺鍦ㄨ繍琛屾椂涓彁渚涖傚湪VC涓紝鎴戜滑鍙互閫氳繃_msize寰楀埌銆?/p>
2. 瀵歸綈闂
鎴戜滑鍦ㄨ闂唴瀛樻椂錛屽鏋滃湴鍧鏄寜4瀛楄妭瀵歸綈錛屽垯璁塊棶鏁堢巼浼?xì)楂樺緢澶氥傝繖涓棶棰樼殑鍘熷洜鍦ㄤ簬璁塊棶鍐呭瓨鐨勭‖浠剁數(shù)璺備竴鑸儏鍐典笅錛屽湴鍧鎬葷嚎鎬繪槸鎸夌収瀵歸綈鍚庣殑鍦板潃鏉ヨ闂備緥濡備綘鎯沖緱鍒?x00000001寮濮嬬殑4瀛楄妭鍐呭錛岀郴緇熼鍏堥渶瑕佷互0x00000000璇?瀛楄妭錛岀劧鍚庝粠涓彇寰?瀛楄妭錛岀劧鍚庡湪鐢?x00000004浣滀負(fù)寮濮嬪湴鍧錛岃幏寰椾笅涓涓洓瀛楄妭錛屽湪浠庝腑寰楀埌絎竴涓瓧鑺傦紝涓ゆ緇勫悎鍑轟綘鎯沖緱鍒扮殑鍐呭銆備絾鏄鏋滃湴鍧涓寮濮嬪氨鏄榻愬埌0x00000000錛屽垯緋葷粺鍙涓嬈¤鍐欏嵆鍙?/p>
涓轟簡鎬ц兘鑰冭檻錛岀紪璇戝櫒浼?xì)瀵咕l撴瀯榪涜瀵歸綈澶勭悊銆傝冭檻涓嬮潰鐨勭粨鏋?/p>
struct aStruct
...{
char cValue;
int iValue;
};
鐩磋鐨勮錛岃繖涓粨鏋勭殑灝哄鏄痵izeof(char)+sizeof(int)錛?,浣嗘槸鍦ㄥ疄闄呯紪璇戜笅錛岃繖涓粨鏋勫昂瀵哥己鐪佹槸8錛屽洜涓虹浜屼釜鍩焛value浼?xì)琚瘹w綈鍒扮鍥涗釜瀛楄妭銆?/p>
鍦╒C涓紝鎴戜滑鍙互鐢╬ack棰勫鐞嗘寚浠ゆ潵紱佹瀵歸綈璋冩暣銆備緥濡?涓嬮潰浠g爜灝嗕嬌寰楃粨鏋勫昂瀵告洿鍔犵揣鍑戯紝涓嶄細(xì)鍑虹幇瀵歸綈鍒?瀛楄妭闂錛?/p>
#pragma pack(1)
struct aStruct...{
char cValue;
int iValue;
};
#pragma pack()瀵逛簬榪欎釜pack鎸囦護(hù)鐨勫惈涔夛紝澶у鍙互鏌ヨMSDN銆傝娉ㄦ剰錛氶櫎闈炰綘瑙夊緱蹇呴』榪欐牱錛屼笉瑕佽交鏄撳仛榪欐牱鐨勮皟鏁達(dá)紝鍥犱負(fù)榪欏皢闄嶄綆紼嬪簭鎬ц兘銆傜洰鍓嶆瘮杈冨父瑙佺殑鐢ㄦ硶鏄細(xì)1. 榪欎釜緇撴瀯闇瑕佽鐩存帴鍐欏叆鏂囦歡 2. 榪欎釜緇撴瀯闇瑕侀氳繃緗戠粶浼犵粰鍏朵粬紼嬪簭銆?/p>
娉ㄦ剰錛氬瓧鑺傚榻愭槸緙栬瘧鏃跺喅瀹氱殑錛屼竴鏃﹀喅瀹氫笉浼?xì)鍐嶆敼鍙樺Q屽洜姝ゅ嵆浣挎湁瀵歸綈鐨勫洜绱犲湪錛屼篃涓嶄細(xì)鍑虹幇涓涓粨鏋勫湪榪愯鏃跺昂瀵稿彂鐢熷彉鍖栫殑鎯呭喌鍑虹幇銆?/p>
銆銆IP鍗忚錛圛nternet Protocol錛夋槸緗戠粶灞傚崗璁紝鐢ㄥ湪鍥犵壒緗戜笂錛孴CP錛孶DP錛孖CMP錛孖GMP鏁版嵁閮芥槸鎸夌収IP鏁版嵁鏍煎紡鍙戦佸緱銆侷P鍗忚鎻愪緵鐨勬槸涓嶅彲闈犳棤榪炴帴寰楁湇鍔°侷P鏁版嵁鍖呯敱涓涓ご閮ㄥ拰涓涓鏂囬儴鍒嗘瀯鎴愩傛鏂囦富瑕佹槸浼犺緭鐨勬暟鎹紝鎴戜滑涓昏鏉ョ悊瑙eご閮ㄦ暟鎹紝鍙互浠庡叾鐞嗚В鍒癐P鍗忚銆傘
銆銆IP鏁版嵁鍖呭ご閮ㄦ牸寮忥紙RFC791錛?/strong>

銆銆Example Internet Datagram Header銆
銆銆涓婇潰鐨勫氨鏄疘P鏁版嵁鐨勫ご閮ㄦ牸寮忥紝榪欓噷澶ф鍦頒粙緇嶄竴涓嬨傘
銆銆IP澶撮儴鐢?0瀛楄妭鐨勫浐瀹氶暱搴﹀拰涓涓彲閫変換鎰忛暱搴﹂儴鍒嗘瀯鎴愶紝浠ュぇ孌電偣鏈烘搴忎紶閫侊紝浠庡乏鍒?鍙熾傘
銆銆TCP鍗忚銆
銆銆TCP鍗忚錛圱RANSMISSION CONTROL PROTOCOL錛夋槸浼犺緭灞傚崗璁紝涓哄簲鐢ㄥ眰鎻愪緵鏈嶅姟錛屽拰UDP涓嶅悓鐨勬槸錛孴CP鍗忚鎻愪緵鐨勫彲闈犵殑闈㈠悜榪炴帴鐨勬湇鍔°傚湪RFC793涓槸鍩烘湰鐨凾CP鎻忚堪銆傚叧浜嶵CP鍗忚鐨勫ご閮ㄦ牸寮忓唴瀹圭殑璇存槑錛氥
銆銆TCP Header FORMat銆
銆

銆銆TCP Header FORMat銆
銆銆璺烮P澶撮儴宸笉澶氾紝鍩烘湰鐨勯暱搴︿篃鏄?0瀛楄妭銆俆CP鏁版嵁鍖呮槸鍖呭惈鍦ㄤ竴涓狪P鏁版嵁鎶ユ枃涓殑銆傘
銆銆濂戒簡錛岀畝鍗曚粙緇嶅埌姝や負(fù)姝€傛潵鐪嬬湅鎴戞崟鑾風(fēng)殑渚嬪瓙鍚с傝繖鏄竴嬈TP鐨勮繛鎺ワ紝鍛靛懙錛屾槸cuteftp榛樿鐨刢uteftp鐨凢TP绔欑偣錛孖P鍦板潃鏄細(xì)216.3.226.21銆傛垜鐨処P鍦板潃鍋囪涓?192.168.1.1銆備笅闈㈢殑鏁版嵁灝辨槸TCO/IP榪炴帴榪囩▼涓殑鏁版嵁浼犺緭銆傛垜浠彲浠ュ垎鏋怲CP/IP鍗忚鏁版嵁鏍煎紡浠ュ強(qiáng)TCP/IP榪炴帴鐨勪笁嬈℃彙鎵嬶紙ThreeWay-Handshake錛夋儏鍐點(diǎn)備笅闈㈢殑榪欎簺鍗佸叚榪涘埗鏁版嵁鍙槸TCP/IP鍗忚鐨勬暟鎹紝涓嶆槸瀹屾暣鐨勭綉緇滈氳鏁版嵁銆傘
銆銆絎竴嬈★紝鎴戝悜FTP绔欑偣鍙戦佽繛鎺ヨ姹傦紙鎴戞妸TCP鏁版嵁鐨勫彲閫夐儴鍒嗗幓鎺変簡錛夈
銆銆192.168.1.1->216.3.226.21銆
銆銆IP澶撮儴錛?45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15銆
銆銆TCP澶撮儴錛?d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00銆
銆銆鏉ョ湅鐪婭P澶撮儴鐨勬暟鎹槸浜涗粈涔堛傘
銆銆絎竴瀛楄妭錛?#8220;45”錛屽叾涓?#8220;4”鏄疘P鍗忚鐨勭増鏈紙Version錛夛紝璇存槑鏄疘P4銆?#8220;5”鏄疘HL浣嶏紝琛ㄧずIP澶撮儴鐨勯暱搴︼紝鏄竴涓?bit瀛楁錛屾渶澶у氨鏄?111浜嗭紝鍊間負(fù)12錛孖P澶撮儴鐨勬渶澶ч暱搴﹀氨鏄?0瀛楄妭銆傝岃繖閲屼負(fù)“5”錛岃鏄庢槸20瀛楄妭錛岃繖鏄爣鍑嗙殑IP澶撮儴闀垮害錛屽ご閮ㄦ姤鏂囦腑娌℃湁鍙戦佸彲閫夐儴鍒嗘暟鎹傘
銆銆鎺ヤ笅鏉ョ殑涓涓瓧鑺?#8220;00”鏄湇鍔$被鍨嬶紙Type of Service錛夈傝繖涓?bit瀛楁鐢?bit鐨勪紭鍏堟潈瀛愬瓧孌碉紙鐜板湪宸茬粡琚拷鐣ワ級錛? bit鐨凾OS瀛愬瓧孌典互鍙? bit鐨勬湭鐢ㄥ瓧孌碉紙鐜板湪涓?錛夋瀯鎴?4 bit鐨凾OS瀛愬瓧孌靛寘鍚細(xì)鏈灝忓歡鏃躲佹渶澶у悶鍚愰噺銆佹渶楂樺彲闈犳т互鍙?qiáng)鏈灝忚垂鐢ㄦ瀯鎴愶紝榪欏洓涓?bit浣嶆渶澶氬彧鑳芥湁涓涓負(fù)1錛屾湰渚嬩腑閮戒負(fù)0錛岃〃紺烘槸涓鑸湇鍔°傘
銆銆鎺ョ潃鐨勪袱涓瓧鑺?#8220;00 30”鏄疘P鏁版嵁鎶ユ枃鎬婚暱錛屽寘鍚ご閮ㄤ互鍙?qiáng)鏁版嵁锛寴q欓噷琛ㄧず48瀛楄妭銆傝繖48瀛楄妭鐢?0瀛楄妭鐨処P澶撮儴浠ュ強(qiáng)28瀛楄妭鐨凾CP澶存瀯鎴愶紙鏈潵鎴彇鐨凾CP澶村簲璇ユ槸28瀛楄妭鐨勶紝鍏朵腑8瀛楄妭涓哄彲閫夐儴鍒嗭紝琚垜鐪佸幓浜嗭級銆傚洜姝ょ洰鍓嶆渶澶х殑IP鏁版嵁鍖呴暱搴︽槸65535瀛楄妭銆傘
銆銆鍐嶆槸涓や釜瀛楄妭鐨勬爣蹇椾綅錛圛dentification錛夛細(xì)“5252”錛岃漿鎹負(fù)鍗佽繘鍒跺氨鏄?1074銆傝繖涓槸璁╃洰鐨勪富鏈烘潵鍒ゆ柇鏂版潵鐨勫垎孌靛睘浜庡摢涓垎緇勩傘
銆銆涓嬩竴涓瓧鑺?#8220;40”錛岃漿鎹負(fù)浜岃繘鍒跺氨鏄?#8220;0100 0000”錛屽叾涓涓浣嶆槸IP鍗忚鐩墠娌℃湁鐢ㄤ笂鐨勶紝涓?銆傛帴鐫鐨勬槸涓や釜鏍囧織DF鍜孧F銆侱F涓?琛ㄧず涓嶈鍒嗘錛孧F涓?琛ㄧず榪樻湁榪涗竴姝ョ殑鍒嗘錛堟湰渚嬩負(fù)0錛夈傜劧鍚庣殑“0 0000”鏄垎孌典究縐伙紙F(tuán)ragment Offset錛夈傘
銆銆“80”榪欎釜瀛楄妭灝辨槸TTL錛圱ime To Live錛変簡錛岃〃紺轟竴涓狪P鏁版嵁嫻佺殑鐢熷懡鍛ㄦ湡錛岀敤Ping鏄劇ず鐨勭粨鏋滐紝鑳藉緱鍒癟TL鐨勫鹼紝寰堝鏂囩珷灝辮閫氳繃TTL浣嶆潵鍒ゅ埆涓繪満綾誨瀷銆傚洜涓轟竴鑸富鏈洪兘鏈夐粯璁ょ殑TTL鍊鹼紝涓嶅悓緋葷粺鐨勯粯璁ゅ間笉涓鏍楓傛瘮濡俉INDOWS涓?28銆備笉榪囷紝涓鑸琍ing寰楀埌鐨勯兘涓嶆槸榛樿鍊鹼紝榪欐槸鍥犱負(fù)姣忔IP鏁版嵁鍖呯粡榪囦竴涓礬鐢卞櫒鐨勬椂鍊橳TL灝卞噺涓錛屽綋鍑忓埌0鏃訛紝榪欎釜鏁版嵁鍖呭氨娑堜骸浜嗐傝繖涔熸椂Tracert鐨勫師鐞嗐傛湰渚嬩腑涓?#8220;80”錛岃漿鎹負(fù)鍗佽繘鍒跺氨鏄?28浜嗭紝鎴戠敤鐨刉IN2000銆傘
銆銆緇х畫涓嬫潵鐨勬槸“06”錛岃繖涓瓧鑺傝〃紺轟紶杈撳眰鐨勫崗璁被鍨嬶紙Protocol錛夈傚湪RFC790涓湁瀹氫箟錛?琛ㄧず浼犺緭灞傛槸TCP鍗忚銆傘
銆銆“2c 23”榪欎釜16bit鏄ご鏍¢獙鍜岋紙Header Checksum錛夈傘
銆銆鎺ヤ笅鏉?#8220;c0 a8 01 01”錛岃繖涓氨鏄簮鍦板潃錛圫ource Address錛変簡錛屼篃灝辨槸鎴戠殑IP鍦板潃銆?
銆銆杞崲涓哄崄榪涘埗鐨処P鍦板潃灝辨槸錛?92.168.1.1錛屽悓鏍鳳紝緇х畫涓嬫潵鐨?2浣?#8220;d8 03 e2 15”鏄洰鏍囧湴鍧錛?16.3.226.21銆
銆銆濂戒簡錛岀湡绱晩錛岀粓浜庣湅瀹屽熀鏈殑20瀛楄妭鐨処P鏁版嵁鎶ュご浜嗐傜戶緇湅TCP鐨勫ご閮ㄥ惂錛岃繖涓槸浣滀負(fù)IP鏁版嵁鍖呯殑鏁版嵁閮ㄥ垎浼犺緭鐨勩傘
銆銆TCP澶撮儴錛?d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00銆
銆銆涓鏉ュ氨鏄竴涓袱瀛楄妭孌?#8220;0d 28”錛岃〃紺烘湰鍦扮鍙e彿錛岃漿鎹負(fù)鍗佽繘鍒跺氨鏄?368銆傜浜屼釜涓ゅ瓧鑺傛“00 15”琛ㄧず鐩爣绔彛錛屽洜涓烘垜鏄繛鎺TP绔欑偣錛屾墍浠ワ紝榪欎釜灝辨槸21鍟︼紝鍗佸叚榪涘埗褰撶劧灝辨槸“00 15”銆傘
銆銆鎺ヤ笅鏉ョ殑鍥涗釜瀛楄妭“50 5f a9 06”鏄『搴忓彿錛圫equence Number錛夛紝綆鍐欎負(fù)SEQ錛孲EQ=1348446470涓嬮潰鐨勫洓涓瓧鑺?#8220;00 00 00 00”鏄‘璁ゅ彿錛圓cknowledgment Number錛夛紝綆鍐欎負(fù)ACKNUM銆傘
銆銆緇х畫涓や釜瀛楄妭錛?#8220;70 02”錛岃漿鎹負(fù)浜岃繘鍒跺惂錛?#8220;0111 0000 0000 0010”銆傝繖涓や釜瀛楄妭,鎬誨叡16bit錛屾湁濂藉涓滆タ鍛€傜涓涓?bit“0111”錛屾槸TCP澶撮暱錛屽崄榪涘埗涓?錛岃〃紺?8涓瓧鑺傦紙鍒氭墠璇翠簡錛屾垜鐪佺暐浜?瀛楄妭鐨刼ption鏁版嵁錛屾墍浠ヤ綘鍙湅瑙佷簡20瀛楄妭錛夈傛帴鐫鐨?bit鐜板湪TCP鍗忚娌℃湁鐢ㄤ笂錛岄兘涓?銆傛渶鍚庣殑6bit“00 0010”鏄叚涓噸瑕佺殑鏍囧織銆傝繖鏄袱涓綆楁満鏁版嵁浜ゆ祦鐨勪俊鎭爣蹇椼傛帴鏀跺拰鍙戦佹柇鏍規(guī)嵁榪欎簺鏍囧織鏉ョ‘瀹氫俊鎭祦鐨勭綾匯備笅闈㈡槸涓浜涗粙緇嶏細(xì)銆
銆銆URG錛氾紙Urgent Pointer field significant錛夌揣鎬ユ寚閽堛傜敤鍒扮殑鏃跺欏間負(fù)1錛岀敤鏉ュ鐞嗛伩鍏峊CP鏁版嵁嫻佷腑鏂
銆銆ACK錛氾紙Acknowledgment fieldsignificant錛夌疆1鏃惰〃紺虹‘璁ゅ彿錛圓cknowledgmentNumber錛変負(fù)鍚堟硶錛屼負(fù)0鐨勬椂鍊欒〃紺烘暟鎹涓嶅寘鍚‘璁や俊鎭紝紜鍙瘋蹇界暐銆傘
銆銆PSH錛氾紙Push Function錛夛紝PUSH鏍囧織鐨勬暟鎹紝緗?鏃惰姹傜殑鏁版嵁孌靛湪鎺ユ敹鏂瑰緱鍒板悗灝卞彲鐩存帴閫佸埌搴旂敤紼嬪簭錛岃屼笉蹇呯瓑鍒扮紦鍐插尯婊℃椂鎵嶄紶閫併傘
銆銆RST錛氾紙Reset the connection錛夌敤浜庡浣嶅洜鏌愮鍘熷洜寮曡搗鍑虹幇鐨勯敊璇繛鎺ワ紝涔熺敤鏉ユ嫆緇濋潪娉曟暟鎹拰璇鋒眰銆傚鏋滄帴鏀跺埌RST浣嶆椂鍊欙紝閫氬父鍙戠敓浜嗘煇浜涢敊璇傘
銆銆SYN錛氾紙Synchronize sequence numbers錛夌敤鏉ュ緩绔嬭繛鎺ワ紝鍦ㄨ繛鎺ヨ姹備腑錛孲YN=1錛孉CK=0錛岃繛鎺ュ搷搴旀椂錛孲YN=1錛孉CK=1銆傚嵆錛孲YN鍜孉CK鏉ュ尯鍒咰onnection Request鍜孋onnection Accepted銆傘
銆銆FIN錛氾紙No more data from sender錛夌敤鏉ラ噴鏀捐繛鎺ワ紝琛ㄦ槑鍙戦佹柟宸茬粡娌℃湁鏁版嵁鍙戦佷簡銆傘
銆銆榪?涓爣蹇椾綅錛屼綘浠嚜宸卞鍙峰叆搴у惂銆傛湰渚嬩腑SYN=1錛孉CK=0錛屽綋鐒跺氨鏄〃紺鴻繛鎺ヨ姹備簡銆傛垜浠彲浠ユ敞鎰忎笅闈袱涓繃紼嬬殑榪欎袱浣嶇殑鍙樻崲銆傘
銆銆鍚庨潰鐨?#8220;40 00 c0 29 00 00”涓嶈浜嗭紝鍛靛懙錛屽伔鎳掍簡銆傚悗闈袱嬈¢氳鐨勬暟鎹紝鑷繁鍒嗗紑鐪嬪惂銆傛垜浠湅鐪嬭繛鎺ョ殑榪囩▼錛屼竴浜涢噸瑕佸湴鏂圭殑鍙樺寲銆傘
銆銆絎簩嬈★紝FTP绔欑偣榪斿洖涓涓彲浠ヨ繛鎺ョ殑淇″彿銆傘
銆銆216.3.226.21->192.168.1.1銆
銆銆IP澶撮儴錛?45 00 00 2c c6 be 40 00 6a 06 cd ba d8 03 e2 15 c0 a8 01 01銆
銆銆TCP澶撮儴錛?0 15 0d 28 4b 4f 45 c1 50 5f a9 07 60 12 20 58 64 07 00 00銆
銆銆絎笁嬈★紝鎴戠‘璁よ繛鎺ャ俆CP榪炴帴寤虹珛璧鋒潵銆傘
銆銆192.168.1.1->216.3.226.21銆
銆銆IP澶撮儴錛?45 00 00 28 52 53 40 00 80 06 2c 2a c0 a8 01 01 d8 03 e2 15銆
銆銆TCP澶撮儴錛?d 28 00 15 50 5f a9 07 4b 4f 45 c2 50 10 40 b0 5b 1c 00 00銆
銆銆濂斤紝鎴戜滑鐪嬬湅鏁翠釜Threeway_handshake榪囩▼銆傘
銆銆絎竴姝ワ紝鎴戝彂鍑鴻繛鎺ヨ姹傦紝TCP鏁版嵁涓猴細(xì)SEQ=50 5f a9 06錛孉CKNUM=00 00 00 00錛孲YN=1錛孉CK=0銆傘
銆銆絎簩姝ワ紝瀵規(guī)柟紜鍙互榪炴帴錛孴CP鏁版嵁涓猴細(xì)SEQ=4b 4f 45 c1錛孉CKNUM=50 5f a9 07錛孲YN=1錛孉CK=1銆傘
銆銆絎笁姝ワ紝鎴戠‘璁ゅ緩绔嬭繛鎺ャ係EQ=50 5f a9 07錛?ACKNUM=4b 4f45c2錛孲YN=0錛孉CK=1銆傘
銆銆鍙互鐪嬪嚭浠涔堝彉鍖栦箞錛熸寮忓緩绔嬭繛鎺ヤ簡鍛紝榪欎簺涓滆タ鏄粈涔堝鹼紵銆
銆銆鎴戞帴鏀朵粠216.3.226.21->192.168.1.1鐨勪笅涓涓暟鎹寘涓細(xì)銆
銆銆SEQ=4b 4f 45 c2錛孉CKNUM=50 5f a9 07,SYN=0,ACK=1榪欎簺閮芥槸寰堝熀紜鐨勪笢瑗匡紝瀵逛簬緙栧啓sniffer榪欐牱鐨勪笢瑗挎槸蹇呴』闈炲父鐔熸?zhèn)夌殑銆傝繖閲屽彧璁茶В浜員CP/IP鍗忚鐨勪竴鐐圭偣涓滆タ錛屼富瑕佹槸澶撮儴鏁版嵁鐨勬牸寮?/p>
浠ヤ笅鐢ㄤ竴涓嚜鍒涚殑瀵硅瘽妗嗙被(MyMessageDlg)鍚戣鍥劇被(MessageTestView)
鍙戦佽嚜瀹氫箟娑堟伅涓轟緥錛岃鏄庤繖涓ょ涓嶅悓鏂規(guī)硶鐨勮嚜瀹氫箟娑堟伅鐨?/span>
娑堟伅浼犻掔殑鏂規(guī)硶涓錛氫嬌鐢∣N_MESSAGE
浣跨敤ON_MESSAGE鍝嶅簲娑堟伅錛屽繀欏婚厤鍚堝畾涔夋秷鎭?define WM_MY_MESSAGE (WM_USER+100)
瀵逛簬鍙戦佹秷鎭?/span>-MyMessageDlg錛?br>鍦ㄥ叾MyMessageDlg.h涓紝瀹氫箟#define WM_MY_MESSAGE (WM_USER+100)
鍦ㄥ叾MyMessageDlg.cpp涓鍏堟坊鍔狅細(xì)錛僫 nclude "MainFrm.h"
鍥犱負(fù)浣跨敤浜咰MainFrame*瀹氫箟瀵硅薄銆?br>騫朵笖瑕佹湁嫻嬭瘯娑堟伅鐨勫嚱鏁幫細(xì)
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //鍏堥氳繃鑾峰彇褰撳墠妗嗘灦鎸囬拡
CView * active = pMF->GetActiveView();//鎵嶈兘鑾峰彇褰撳墠瑙嗙被鎸囬拡
if(active != NULL) //鑾峰彇浜嗗綋鍓嶈綾繪寚閽堟墠鑳藉彂閫佹秷鎭?br> active->PostMessage(WM_MY_MESSAGE,0,0); //浣跨敤PostMessage鍙戦佹秷鎭?br>}
瀵逛簬娑堟伅鐨勬帴鍙楄?/span>-MessageTestView錛?br>鍦ㄥ叾MessageTestView.h涓紝涔熻瀹氫箟#define WM_MY_MESSAGE (WM_USER+100)
騫跺畾涔夋秷鎭槧灝勫嚱鏁?OnMyMessage()
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
鍦ㄥ叾MessageTestView.cpp涓紝
鍏堣澹版槑鍝嶅簲娑堟伅錛?br>BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
鍐嶆坊鍔犳秷鎭搷搴旂殑鍑芥暟瀹炵幇錛?br>LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
娑堟伅浼犻掔殑鏂規(guī)硶浜岋細(xì)浣跨敤ON_REGISTERED_MESSAGE
浣跨敤ON_REGISTERED_MESSAGE娉ㄥ唽娑堟伅錛屽繀欏婚厤鍚?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
瀵逛簬娑堟伅鐨勫彂閫佽?/span>-MyMessageDlg錛?br>鍦ㄥ叾MyMessageDlg.h涓紝鍙
瀹氫箟static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
灝卞彲浠ヤ簡銆?br>鍦ㄥ叾MyMessageDlg.cpp涓鍏堟坊鍔狅細(xì)錛僫 nclude "MainFrm.h"
鍥犱負(fù)浣跨敤浜咰MainFrame*瀹氫箟瀵硅薄銆?br>騫朵笖瑕佹湁嫻嬭瘯娑堟伅鐨勫嚱鏁幫細(xì)
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //鍏堥氳繃鑾峰彇褰撳墠妗嗘灦鎸囬拡
CView * active = pMF->GetActiveView();//鎵嶈兘鑾峰彇褰撳墠瑙嗙被鎸囬拡
if(active != NULL) //鑾峰彇浜嗗綋鍓嶈綾繪寚閽堟墠鑳藉彂閫佹秷鎭?br> active->PostMessage(WM_MY_MESSAGE,0,0); //浣跨敤PostMessage鍙戦佹秷鎭?br>}
瀵逛簬娑堟伅鐨勬帴鏀惰?/span>-MessageTestView錛?br>鍦ㄥ叾MessageTestView.h涓笉瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); ------------------------------------------------------------------- 鍏朵粬娉ㄦ剰浜嬮」錛?/p>
鍙戦佹秷鎭殑-MyMessageDlg.cpp鍓嶄篃瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); 鎺ュ彈娑堟伅鐨?MessageTestView.cpp鍓嶄篃瑕佸畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); RegisterWindowMessage("Message")涓?"鐨勫唴瀹規(guī)槸浠涔堜笉閲嶈錛屽啓浠涔堥兘鍙互錛屼絾鏄?br>鍙戦佽呬笌鎺ュ彈鑰呭繀欏繪槸涓鏍風(fēng)殑鍐呭錛屼緥濡傦細(xì)"Message"
搴旇鎶婅繖涓畾涔夋斁鍒癕essageTestView.cpp涓紝瑕佷笉浼?xì)鍑虹? redefinition
鍦ㄥ叾MessageTestView.h涓彧瑕佸畾涔夋秷鎭槧灝勫嚱鏁?br>protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
鍦ㄥ叾MessageTestView.cpp涓?鍏堝畾涔?br>static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
鎺ョ潃娉ㄥ唽娑堟伅錛?br>BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
鏈鍚庢坊鍔犳秷鎭搷搴旂殑鍑芥暟瀹炵幇錛?br>LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
----------------------------------------------------------------
姣旇緝涓ょ鏂規(guī)硶錛屽彧鏄暐鏈変笉鍚屻備絾涔熻灝忓績璋ㄦ厧錛屼互鍏嶅嚭鐜版帴鏀朵笉鍒版秷鎭殑鎯呭喌銆?/p>
]]>
#include <iostream>
#include <list>
#include <numeric>
#include <algorithm> 
using namespace std; 
//鍒涘緩涓涓猯ist瀹瑰櫒鐨勫疄渚婰ISTINT
typedef list<int> LISTINT; 
//鍒涘緩涓涓猯ist瀹瑰櫒鐨勫疄渚婰ISTCHAR
typedef list<int> LISTCHAR; 
void main(void) 

{
//--------------------------
//鐢╨ist瀹瑰櫒澶勭悊鏁村瀷鏁版嵁
//--------------------------
//鐢↙ISTINT鍒涘緩涓涓悕涓簂istOne鐨刲ist瀵硅薄
LISTINT listOne;
//澹版槑i涓鴻凱浠e櫒
LISTINT::iterator i;
//浠庡墠闈㈠悜listOne瀹瑰櫒涓坊鍔犳暟鎹?nbsp;
listOne.push_front (2);
listOne.push_front (1);
//浠庡悗闈㈠悜listOne瀹瑰櫒涓坊鍔犳暟鎹?nbsp;
listOne.push_back (3);
listOne.push_back (4);
//浠庡墠鍚戝悗鏄劇ずlistOne涓殑鏁版嵁
cout<<"listOne.begin()--- listOne.end():"<<endl;
for (i = listOne.begin(); i != listOne.end(); ++i)
cout << *i << " ";
cout << endl;
//浠庡悗鍚戝悗鏄劇ずlistOne涓殑鏁版嵁
LISTINT::reverse_iterator ir;
cout<<"listOne.rbegin()---listOne.rend():"<<endl; 
for (ir =listOne.rbegin(); ir!=listOne.rend();ir++)
{
cout << *ir << " ";
}
cout << endl;
//浣跨敤STL鐨刟ccumulate(绱姞)綆楁硶
int result = accumulate(listOne.begin(), listOne.end(),0);
cout<<"Sum="<<result<<endl;
cout<<"------------------"<<endl;
//--------------------------
//鐢╨ist瀹瑰櫒澶勭悊瀛楃鍨嬫暟鎹?nbsp;
//--------------------------
//鐢↙ISTCHAR鍒涘緩涓涓悕涓簂istOne鐨刲ist瀵硅薄
LISTCHAR listTwo;
//澹版槑i涓鴻凱浠e櫒
LISTCHAR::iterator j;
//浠庡墠闈㈠悜listTwo瀹瑰櫒涓坊鍔犳暟鎹?nbsp;
listTwo.push_front ('A');
listTwo.push_front ('B');
//浠庡悗闈㈠悜listTwo瀹瑰櫒涓坊鍔犳暟鎹?nbsp;
listTwo.push_back ('x');
listTwo.push_back ('y');
//浠庡墠鍚戝悗鏄劇ずlistTwo涓殑鏁版嵁
cout<<"listTwo.begin()---listTwo.end():"<<endl;
for (j = listTwo.begin(); j != listTwo.end(); ++j)
cout << char(*j) << " ";
cout << endl;
//浣跨敤STL鐨刴ax_element綆楁硶姹俵istTwo涓殑鏈澶у厓绱犲茍鏄劇ず
j=max_element(listTwo.begin(),listTwo.end());
cout << "The maximum element in listTwo is: "<<char(*j)<<endl;
} 
#include <iostream>
#include <list> 
using namespace std;
typedef list<int> INTLIST; 
//浠庡墠鍚戝悗鏄劇ずlist闃熷垪鐨勫叏閮ㄥ厓绱?nbsp;
void put_list(INTLIST list, char *name) 

{
INTLIST::iterator plist;
cout << "The contents of " << name << " : ";
for(plist = list.begin(); plist != list.end(); plist++)
cout << *plist << " ";
cout<<endl;
} 
//嫻嬭瘯list瀹瑰櫒鐨勫姛鑳?nbsp;
void main(void) 

{
//list1瀵硅薄鍒濆涓虹┖
INTLIST list1;
//list2瀵硅薄鏈鍒濇湁10涓間負(fù)6鐨勫厓绱?nbsp;
INTLIST list2(10,6);
//list3瀵硅薄鏈鍒濇湁3涓間負(fù)6鐨勫厓绱?nbsp;
INTLIST list3(list2.begin(),--list2.end());
//澹版槑涓涓悕涓篿鐨勫弻鍚戣凱浠e櫒
INTLIST::iterator i;
//浠庡墠鍚戝悗鏄劇ず鍚刲ist瀵硅薄鐨勫厓绱?nbsp;
put_list(list1,"list1");
put_list(list2,"list2");
put_list(list3,"list3");
//浠巐ist1搴忓垪鍚庨潰娣誨姞涓や釜鍏冪礌
list1.push_back(2);
list1.push_back(4);
cout<<"list1.push_back(2) and list1.push_back(4):"<<endl;
put_list(list1,"list1");
//浠巐ist1搴忓垪鍓嶉潰娣誨姞涓や釜鍏冪礌
list1.push_front(5);
list1.push_front(7);
cout<<"list1.push_front(5) and list1.push_front(7):"<<endl;
put_list(list1,"list1");
//鍦╨ist1搴忓垪涓棿鎻掑叆鏁版嵁
list1.insert(++list1.begin(),3,9);
cout<<"list1.insert(list1.begin()+1,3,9):"<<endl;
put_list(list1,"list1");
//嫻嬭瘯寮曠敤綾誨嚱鏁?nbsp;
cout<<"list1.front()="<<list1.front()<<endl;
cout<<"list1.back()="<<list1.back()<<endl;
//浠巐ist1搴忓垪鐨勫墠鍚庡悇縐誨幓涓涓厓绱?nbsp;
list1.pop_front();
list1.pop_back();
cout<<"list1.pop_front() and list1.pop_back():"<<endl;
put_list(list1,"list1");
//娓呴櫎list1涓殑絎?涓厓绱?nbsp;
list1.erase(++list1.begin());
cout<<"list1.erase(++list1.begin()):"<<endl;
put_list(list1,"list1");
//瀵筶ist2璧嬪煎茍鏄劇ず
list2.assign(8,1);
cout<<"list2.assign(8,1):"<<endl;
put_list(list2,"list2");
//鏄劇ず搴忓垪鐨勭姸鎬佷俊鎭?nbsp;
cout<<"list1.max_size(): "<<list1.max_size()<<endl;
cout<<"list1.size(): "<<list1.size()<<endl;
cout<<"list1.empty(): "<<list1.empty()<<endl;
//list搴忓垪瀹瑰櫒鐨勮繍綆?nbsp;
put_list(list1,"list1");
put_list(list3,"list3");
cout<<"list1>list3: "<<(list1>list3)<<endl;
cout<<"list1<list3: "<<(list1<list3)<<endl;
//瀵筶ist1瀹瑰櫒鎺掑簭
list1.sort();
put_list(list1,"list1");
//緇撳悎澶勭悊
list1.splice(++list1.begin(), list3);
put_list(list1,"list1");
put_list(list3,"list3");
} 

| #define WM_MY_MESSAGE (WM_USER+100) |
| LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { // TODO: 澶勭悊鐢ㄦ埛鑷畾涔夋秷鎭? ... return 0; } |
| class CMainFrame:public CMDIFrameWnd { ... // 涓鑸秷鎭槧灝勫嚱鏁? protected: // {{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnTimer(UINT nIDEvent); afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //}}AFX_MSG DECLARE_MESSAGE_MAP() } |
| BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_TIMER() ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) //}}AFX_MSG_MAP END_MESSAGE_MAP() |
| static UINT WM_MY_MESSAGE=RegisterWindowMessage("User"); |
| DWORD result; SendMessageTimeout(wnd->m_hWnd, // 鐩爣紿楀彛 WM_MY_MESSAGE, // 娑堟伅 0, // WPARAM 0, // LPARAM SMTO_ABORTIFHUNG | SMTO_NORMAL, TIMEOUT_INTERVAL, &result); |
| ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //瀹氫箟娑堟伅鏄犲皠 瑙嗙被瀹氫箟娑堟伅澶勭悊鍑芥暟錛?br> // 娑堟伅澶勭悊鍑芥暟 LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam) { // TODO: 澶勭悊鐢ㄦ埛鑷畾涔夋秷鎭? ... return 0; } //鍙戦佹秷鎭殑嫻嬭瘯鍑芥暟 void CMainFrame::OnTest() { CView * active = GetActiveView();//鑾峰彇褰撳墠瑙嗙被鎸囬拡 if(active != NULL) active->PostMessage(WM_MY_MESSAGE,0,0); } |
| //鍙戦佹秷鎭殑嫻嬭瘯鍑芥暟 void CMainFrame::OnTest() { CMDIFrameWnd *pFrame; CMDIChildWnd *pChild; CView *pView; //鑾峰彇涓葷獥鍙f寚閽?br>pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; // 鑾峰彇瀛愮獥鍙f寚閽?br>pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); //鑾峰彇瑙嗙被鎸囬拡 pView = pChild->GetActiveView(); if(pView != NULL) pView->PostMessage(WM_MY_MESSAGE,0,0);//鍙戦佹秷鎭?br>} |
| //鍙戦佹秷鎭殑嫻嬭瘯鍑芥暟 void CMessageView::OnTest() { CFrameWnd * active = GetActiveFrame();//鑾峰彇褰撳墠涓葷獥鍙f鏋舵寚閽?br>if(active != this) active->PostMessage(WM_MY_MESSAGE,0,0); return 0; } |
| //閫氳繃瀵硅瘽妗嗘寜閽彂閫佹秷鎭殑鍑芥暟 void TestDialog::OnDialogTest() { CMDIFrameWnd *pFrame; CMDIChildWnd *pChild; CView *pView; //鑾峰彇涓葷獥鍙f寚閽?br>pFrame =(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; // 鑾峰彇瀛愮獥鍙f寚閽?br>pChild = (CMDIChildWnd *) pFrame->GetActiveFrame(); //鑾峰彇瑙嗙被鎸囬拡 pView = pChild->GetActiveView(); if(active != NULL) active->PostMessage(WM_MY_MESSAGE,0,0);//鍙戦佹秷鎭?br>} |
| static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message"); |
| protected: //{{AFX_MSG(CMessageView) //}}AFX_MSG afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //姝よ涓烘坊鍔犱唬鐮?br>DECLARE_MESSAGE_MAP() 鍦ㄨ綾繪枃浠禡essageView.cpp涓殑娑堟伅鏄犲皠涓坊鍔犺嚜瀹氫箟娑堟伅鏄犲皠 BEGIN_MESSAGE_MAP(CMessageView, CView) //{{AFX_MSG_MAP(CMessageView) //}}AFX_MSG_MAP // Standard printing commands ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage) //姝よ娣誨姞浠g爜瀹氫箟鍞竴娑堟伅 END_MESSAGE_MAP() |
| LRESULT CMessageView::OnMyMessage(WPARAM wParam, LPARAM lParam) { CRect rect; GetClientRect(&rect); InvalidateRect(&rect); test=!test; return 0; } |
| void CMessageView::OnDraw(CDC* pDC) { CMessageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // 浠ヤ笅紼嬪簭鏄劇ず娑堟伅鍝嶅簲鏁堟灉 if(test) pDC->TextOut(0,0,"娑堟伅鍝嶅簲!"); } |
| #include "TestDialog.h"; OnTest()鍑芥暟涓坊鍔犱唬鐮?br>void CMainFrame::OnTest() { TestDialog dialog; dialog.DoModal(); } |
濡傛灉涓嶆壇寰楀お榪滅殑璇濓紙姣斿璇存搷浣滅郴緇熶腑铏氭嫙鍐呭瓨鍜岀墿鐞嗗唴瀛樺浣曡繍鍋氬浣曠鐞嗕箣綾葷殑鐭ヨ瘑絳夛級錛屾垜鎰熻榪欑瘒鏂囩珷搴旇鏄瘮杈冨叏闈㈠湴璋堜簡涓涓媘alloc()鍜宖ree().榪欑瘒鏂囩珷鐢辨祬鍏ユ繁錛堜笉瑙佸緱鏈夊娣憋級鍒嗕笁涓儴鍒嗕粙緇嶄富瑕佸唴瀹廣?/p>
搴熻瘽浜嗛偅涔堝錛屼笅闈㈢珛鍒昏繘鍏ヤ富棰?===============銆嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨?/p>
涓銆乵alloc()鍜宖ree()鐨勫熀鏈蹇典互鍙?qiáng)鍩烘湰鐢ㄦ硶锛?xì)
1銆佸嚱鏁板師鍨嬪強(qiáng)璇存槑錛?/p>
void *malloc(long NumBytes)錛氳鍑芥暟鍒嗛厤浜哊umBytes涓瓧鑺傦紝騫惰繑鍥炰簡鎸囧悜榪欏潡鍐呭瓨鐨勬寚閽堛傚鏋滃垎閰嶅け璐ワ紝鍒欒繑鍥炰竴涓┖鎸囬拡錛圢ULL錛夈?/p>
鍏充簬鍒嗛厤澶辮觸鐨勫師鍥狅紝搴旇鏈夊縐嶏紝姣斿璇寸┖闂翠笉瓚沖氨鏄竴縐嶃?/p>
void free(void *FirstByte)錛?璇ュ嚱鏁版槸灝嗕箣鍓嶇敤malloc鍒嗛厤鐨勭┖闂磋繕緇欑▼搴忔垨鑰呮槸鎿嶄綔緋葷粺錛屼篃灝辨槸閲婃斁浜嗚繖鍧楀唴瀛橈紝璁╁畠閲嶆柊寰楀埌鑷敱銆?/p>
2銆佸嚱鏁扮殑鐢ㄦ硶錛?/p>
鍏跺疄榪欎袱涓嚱鏁扮敤璧鋒潵鍊掍笉鏄緢闅撅紝涔熷氨鏄痬alloc()涔嬪悗瑙夊緱鐢ㄥ浜嗗氨鐢╀簡瀹冩妸瀹冪粰free()浜嗭紝涓句釜綆鍗曚緥瀛愶細(xì)
灝辨槸榪欐牱錛佸綋鐒?dòng)灱屽叿浣撴儏鍐佃鍏蜂綋鍒嗘瀽浠ュ強(qiáng)鍏蜂綋瑙e啛雬傛瘮濡傝錛屼綘瀹氫箟浜嗕竴涓寚閽堬紝鍦ㄤ竴涓嚱鏁伴噷鐢寵浜嗕竴鍧楀唴瀛樼劧鍚庨氳繃鍑芥暟榪斿洖浼犻掔粰榪欎釜鎸囬拡錛岄偅涔堜篃璁?dāng)R噴鏀捐繖鍧楀唴瀛樿繖欏瑰伐浣滃氨搴旇鐣欑粰鍏朵粬鍑芥暟浜嗐?/p>
3銆佸叧浜庡嚱鏁頒嬌鐢ㄩ渶瑕佹敞鎰忕殑涓浜涘湴鏂癸細(xì)
A銆佺敵璇蜂簡鍐呭瓨絀洪棿鍚庯紝蹇呴』媯(gè)鏌ユ槸鍚﹀垎閰嶆垚鍔熴?/p>
B銆佸綋涓嶉渶瑕佸啀浣跨敤鐢寵鐨勫唴瀛樻椂錛岃寰楅噴鏀撅紱閲婃斁鍚庡簲璇ユ妸鎸囧悜榪欏潡鍐呭瓨鐨勬寚閽堟寚鍚慛ULL錛岄槻姝㈢▼搴忓悗闈笉灝忓績浣跨敤浜嗗畠銆?/p>
C銆佽繖涓や釜鍑芥暟搴旇鏄厤瀵廣傚鏋滅敵璇峰悗涓嶉噴鏀懼氨鏄唴瀛樻硠闇詫紱濡傛灉鏃犳晠閲婃斁閭e氨鏄粈涔堜篃娌℃湁鍋氥傞噴鏀懼彧鑳戒竴嬈★紝濡傛灉閲婃斁涓ゆ鍙?qiáng)涓啤浠ヤ笂浼?xì)
鍑虹幇閿欒錛堥噴鏀劇┖鎸囬拡渚嬪錛岄噴鏀劇┖鎸囬拡鍏跺疄涔熺瓑浜庡暐涔熸病鍋氾紝鎵浠ラ噴鏀劇┖鎸囬拡閲婃斁澶氬皯嬈¢兘娌℃湁闂錛夈?/p>
D銆佽櫧鐒秏alloc()鍑芥暟鐨勭被鍨嬫槸(void *),浠諱綍綾誨瀷鐨勬寚閽堥兘鍙互杞崲鎴?void *),浣嗘槸鏈濂借繕鏄湪鍓嶉潰榪涜寮哄埗綾誨瀷杞崲錛屽洜涓鴻繖鏍峰彲浠ヨ翰榪囦竴
浜涚紪璇戝櫒鐨勬鏌ャ?/p>
濂戒簡錛佹渶鍩虹鐨勪笢瑗垮ぇ姒傝繖涔堣錛佺幇鍦ㄨ繘鍏ョ浜岄儴鍒嗭細(xì)
浜屻乵alloc()鍒板簳浠庡摢閲屽緱鏉ヤ簡鍐呭瓨絀洪棿錛?/p>
1銆乵alloc()鍒板簳浠庡摢閲屽緱鍒頒簡鍐呭瓨絀洪棿錛熺瓟妗堟槸浠庡爢閲岄潰鑾峰緱絀洪棿銆備篃灝辨槸璇村嚱鏁拌繑鍥炵殑鎸囬拡鏄寚鍚戝爢閲岄潰鐨勪竴鍧楀唴瀛樸傛搷浣滅郴緇熶腑鏈変竴涓褰曠┖ 闂插唴瀛樺湴鍧鐨勯摼琛ㄣ傚綋鎿嶄綔緋葷粺鏀跺埌紼嬪簭鐨勭敵璇鋒椂錛屽氨浼?xì)閬嶅巻璇ラ摼琛ㄥQ岀劧鍚庡氨瀵繪壘絎竴涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡氨灝嗚緇撶偣浠庣┖闂茬粨鐐歸摼琛ㄤ腑鍒犻櫎錛屽茍 灝嗚緇撶偣鐨勭┖闂村垎閰嶇粰紼嬪簭銆傚氨鏄繖鏍鳳紒
璇村埌榪欓噷錛屼笉寰椾笉鍙﹀鎻掑叆涓涓皬璇濋錛岀浉淇″ぇ瀹朵篃鐭ラ亾鏄粈涔堣瘽棰樹簡銆備粈涔堟槸鍫嗭紵璇村埌鍫嗭紝鍙堝繊涓嶄綇璇村埌浜嗘爤錛佷粈涔堟槸鏍堬紵涓嬮潰灝卞彟澶栧紑涓皬閮ㄥ垎涓撻棬鑰屽張綆鍗曞湴璇翠竴涓嬭繖涓澶栬瘽錛?/p>
2銆佷粈涔堟槸鍫嗭細(xì)鍫嗘槸澶у鍏辨湁鐨勭┖闂達(dá)紝鍒嗗叏灞鍫嗗拰灞閮ㄥ爢銆傚叏灞鍫嗗氨鏄墍鏈夋病鏈夊垎閰嶇殑絀洪棿錛屽眬閮ㄥ爢灝辨槸鐢ㄦ埛鍒嗛厤鐨勭┖闂淬傚爢鍦ㄦ搷浣滅郴緇熷榪涚▼ 鍒濆鍖栫殑鏃跺欏垎閰嶏紝榪愯榪囩▼涓篃鍙互鍚戠郴緇熻棰濆鐨勫爢錛屼絾鏄寰楃敤瀹屼簡瑕佽繕緇欐搷浣滅郴緇燂紝瑕佷笉鐒跺氨鏄唴瀛樻硠婕忋?/p>
浠涔堟槸鏍堬細(xì)鏍堟槸綰跨▼鐙湁鐨勶紝淇濆瓨鍏惰繍琛岀姸鎬佸拰灞閮ㄨ嚜鍔ㄥ彉閲忕殑銆傛爤鍦ㄧ嚎紼嬪紑濮嬬殑鏃跺欏垵濮嬪寲錛屾瘡涓嚎紼嬬殑鏍堜簰鐩哥嫭绔嬨傛瘡涓嚱鏁伴兘鏈夎嚜宸辯殑鏍堬紝鏍堣鐢ㄦ潵鍦ㄥ嚱鏁頒箣 闂翠紶閫掑弬鏁般傛搷浣滅郴緇熷湪鍒囨崲綰跨▼鐨勬椂鍊欎細(xì)鑷姩鐨勫垏鎹㈡爤錛屽氨鏄垏鎹S/ESP瀵勫瓨鍣ㄣ傛爤絀洪棿涓嶉渶瑕佸湪楂樼駭璇█閲岄潰鏄懼紡鐨勫垎閰嶅拰閲婃斁銆?
浠ヤ笂鐨勬蹇墊弿榪版槸鏍囧噯鐨勬弿榪幫紝涓嶈繃鏈変釜鍒鍙ヨ鎴戝垹闄わ紝涓嶇煡閬撳洜涓鴻繖鏍瘋(gè)屽彉寰椾笉鏍囧噯浜哵_^.
閫氳繃涓婇潰瀵規(guī)蹇電殑鎻忚堪錛屽彲浠ョ煡閬擄細(xì)
鏍堟槸鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊箋佸眬閮ㄥ彉閲忕殑鍊肩瓑銆傛搷浣滄柟寮忕被浼間簬鏁版嵁緇撴瀯涓殑鏍堛?/p>
鍫嗕竴鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝鑻ヤ笉閲婃斁錛岀▼搴忕粨鏉熸椂鍙兘鐢監(jiān)S鍥炴敹銆傛敞鎰忚繖閲岃鏄彲鑳斤紝騫墮潪涓瀹氥傛墍浠ユ垜鎯沖啀寮鴻皟涓嬈★紝璁板緱瑕侀噴鏀撅紒
娉ㄦ剰瀹冧笌鏁版嵁緇撴瀯涓殑鍫嗘槸涓ゅ洖浜嬶紝鍒嗛厤鏂瑰紡鍊掓槸綾諱技浜庨摼琛ㄣ?br>鎵浠ワ紝涓句釜渚嬪瓙錛屽鏋滀綘鍦ㄥ嚱鏁頒笂闈㈠畾涔変簡涓涓寚閽堝彉閲忥紝鐒跺悗鍦ㄨ繖涓嚱鏁伴噷鐢寵浜嗕竴鍧楀唴瀛樿鎸囬拡鎸囧悜瀹冦傚疄闄呬笂錛岃繖涓寚閽堢殑鍦板潃鏄湪鏍堜笂錛屼絾鏄畠鎵鎸囧悜鐨勫唴瀹瑰嵈鏄湪鍫嗕笂闈㈢殑錛佽繖涓鐐硅娉ㄦ剰錛佹墍浠ワ紝鍐嶆兂鎯籌紝鍦ㄤ竴涓嚱鏁伴噷鐢寵浜嗙┖闂村悗錛屾瘮濡傝涓嬮潰榪欎釜鍑芥暟錛?
灝辮繖涓緥瀛愶紝鍗冧竾涓嶈璁や負(fù)鍑芥暟榪斿洖錛屽嚱鏁版墍鍦ㄧ殑鏍堣閿姣佹寚閽堜篃璺熺潃閿姣侊紝鐢寵鐨勫唴瀛樹篃灝變竴鏍瘋窡鐫閿姣佷簡錛佽繖緇濆鏄敊璇殑錛佸洜涓虹敵璇風(fēng)殑鍐呭瓨鍦ㄥ爢涓婏紝鑰屽嚱鏁版墍鍦ㄧ殑鏍堣閿姣佽窡鍫嗗畬鍏ㄦ病鏈夊暐鍏崇郴銆傛墍浠ワ紝榪樻槸閭e彞璇濓細(xì)璁板緱閲婃斁錛?/p>
3銆乫ree()鍒板簳閲婃斁浜嗕粈涔?/p>
榪欎釜闂姣旇緝綆鍗曪紝鍏跺疄鎴戞槸鎯沖拰絎簩澶ч儴鍒嗙殑棰樼洰鐩稿懠搴旇屽凡錛佸搱鍝堬紒free()閲婃斁鐨勬槸鎸囬拡鎸囧悜鐨勫唴瀛橈紒娉ㄦ剰錛侀噴鏀劇殑鏄唴瀛橈紝涓嶆槸鎸囬拡錛佽繖鐐歸潪甯擱潪甯擱噸 瑕侊紒鎸囬拡鏄竴涓彉閲忥紝鍙湁紼嬪簭緇撴潫鏃舵墠琚攢姣併傞噴鏀句簡鍐呭瓨絀洪棿鍚庯紝鍘熸潵鎸囧悜榪欏潡絀洪棿鐨勬寚閽堣繕鏄瓨鍦紒鍙笉榪囩幇鍦ㄦ寚閽堟寚鍚戠殑鍐呭鐨勫瀮鍦撅紝鏄湭瀹氫箟鐨勶紝鎵浠ヨ 鏄瀮鍦俱傚洜姝わ紝鍓嶉潰鎴戝凡緇忚榪囦簡錛岄噴鏀懼唴瀛樺悗鎶婃寚閽堟寚鍚慛ULL錛岄槻姝㈡寚閽堝湪鍚庨潰涓嶅皬蹇冨張琚В寮曠敤浜嗐傞潪甯擱噸瑕佸晩榪欎竴鐐癸紒
濂戒簡錛佽繖涓?#8220;棰樺璇?#8221;緇堜簬璇村畬浜嗐傚氨榪欎箞綆鍗曡涓嬈★紝鐭ラ亾涓ぇ姒傚氨鍙互浜嗭紒涓嬮潰灝辮繘鍏ョ涓変釜閮ㄥ垎錛?/p>
涓夈乵alloc()浠ュ強(qiáng)free()鐨勬満鍒訛細(xì)
榪欎釜閮ㄥ垎鎴戜粖澶╂墠鏈変簡鏂扮殑璁よ瘑錛佽屼笖鏄漿鎶樻х殑璁よ瘑錛佹墍浠ワ紝榪欓儴鍒嗗彲鑳戒細(xì)鏈夋洿澶氫竴浜涜璇嗕笂鐨勯敊璇紒涓嶅鐨勫湴鏂硅澶у甯繖鎸囧嚭錛?/p>
浜嬪疄涓婏紝浠旂粏鐪嬩竴涓媐ree()鐨勫嚱鏁板師鍨嬶紝涔熻涔熶細(xì)鍙戠幇浼間箮寰堢濂囷紝free()鍑芥暟闈炲父綆鍗曪紝鍙湁涓涓弬鏁幫紝鍙鎶婃寚鍚戠敵璇風(fēng)┖闂寸殑鎸囬拡浼犻?/p>
緇檉ree()涓殑鍙傛暟灝卞彲浠ュ畬鎴愰噴鏀懼伐浣滐紒榪欓噷瑕佽拷韙埌malloc()鐨勭敵璇烽棶棰樹簡銆傜敵璇風(fēng)殑鏃跺欏疄闄呬笂鍗犵敤鐨勫唴瀛樿姣旂敵璇風(fēng)殑澶с傚洜涓鴻秴鍑虹殑絀洪棿鏄敤鏉ヨ褰曞榪欏潡鍐呭瓨鐨勭鐞嗕俊鎭傚厛鐪嬩竴涓嬪湪銆奤NIX鐜楂樼駭緙栫▼銆嬩腑絎竷绔犵殑涓孌佃瘽錛?/p>
澶у鏁板疄鐜版墍鍒嗛厤鐨勫瓨鍌ㄧ┖闂存瘮鎵瑕佹眰鐨勮紼嶅ぇ涓浜涳紝棰濆鐨勭┖闂寸敤鏉ヨ褰曠鐞嗕俊鎭斺斿垎閰嶅潡鐨勯暱搴︼紝鎸囧悜涓嬩竴涓垎閰嶅潡鐨勬寚閽堢瓑絳夈傝繖灝辨剰鍛崇潃濡傛灉鍐欒繃涓涓凡 鍒嗛厤鍖虹殑灝劇錛屽垯浼?xì)鏀瑰啓鍚庝竴鍧楃殑綆$悊淇℃伅銆傝繖縐嶇被鍨嬬殑閿欒鏄伨闅炬х殑錛屼絾鏄洜涓鴻繖縐嶉敊璇笉浼?xì)寰堝揩灏辨毚闇插嚭鏉ュQ屾墍浠ヤ篃灝卞緢闅懼彂鐜般傚皢鎸囧悜鍒嗛厤鍧楃殑鎸囬拡鍚戝悗縐? 鍔ㄤ篃鍙兘浼?xì)鏀瑰啓鏈潡鐨劷帯鐞嗕俊鎭?/p>
浠ヤ笂榪欐璇濆凡緇忕粰浜嗘垜浠竴浜涗俊鎭簡銆俶alloc()鐢寵鐨勭┖闂村疄闄呮垜瑙夊緱灝辨槸鍒嗕簡涓や釜涓嶅悓鎬ц川鐨勭┖闂淬備竴涓氨鏄敤鏉ヨ褰曠鐞嗕俊鎭殑絀洪棿錛屽彟澶栦竴涓氨鏄彲鐢ㄧ┖闂翠簡銆傝岀敤鏉ヨ褰曠鐞嗕俊鎭殑瀹為檯涓婃槸涓涓粨鏋勪綋銆傚湪C璇█涓紝鐢ㄧ粨鏋勪綋鏉ヨ褰曞悓涓涓璞$殑涓嶅悓淇℃伅鏄?/p>
澶╃粡鍦頒箟鐨勪簨錛佷笅闈㈢湅鐪嬭繖涓粨鏋勪綋鐨勫師鍨嬶細(xì)
瀵逛簬size,榪欎釜鏄疄闄呯┖闂村ぇ灝忋傝繖閲屽叾瀹炴垜鏈変釜鐤戦棶錛宨s_available鏄惁鏄竴涓爣璁幫紵鍥犱負(fù)鎴戠湅浜唂ree()鐨勬簮浠g爜涔嬪悗瀵硅繖涓彉閲忔劅瑙夋湁鐐圭撼闂鳳紙婧愪唬鐮佸湪涓嬮潰鍒嗘瀽錛夈傝繖閲岃繕璇峰ぇ瀹舵寚鍑猴紒
鎵浠ワ紝free()灝辨槸鏍規(guī)嵁榪欎釜緇撴瀯浣撶殑淇℃伅鏉ラ噴鏀緈alloc()鐢寵鐨勭┖闂達(dá)紒鑰岀粨鏋勪綋鐨勪袱涓垚鍛樼殑澶у皬鎴戞兂搴旇鏄搷浣滅郴緇熺殑浜嬩簡銆備絾鏄繖閲屾湁涓涓棶 棰橈紝malloc()鐢寵絀洪棿鍚庤繑鍥炰竴涓寚閽堝簲璇ユ槸鎸囧悜絎簩縐嶇┖闂達(dá)紝涔熷氨鏄彲鐢ㄧ┖闂達(dá)紒涓嶇劧錛屽鏋滄寚鍚戠鐞嗕俊鎭┖闂寸殑璇濓紝鍐欏叆鐨勫唴瀹瑰拰緇撴瀯浣撶殑綾誨瀷鏈夊彲鑳戒笉 涓鑷達(dá)紝鎴栬呬細(xì)鎶婄鐞嗕俊鎭睆钄芥帀錛岄偅灝辨病娉曢噴鏀懼唴瀛樼┖闂翠簡錛屾墍浠ヤ細(xì)鍙戠敓閿欒錛侊紙鎰熻鑷繁榪欓噷璇寸殑鏄簾璇濓級
濂戒簡錛佷笅闈㈢湅鐪媐ree()鐨勬簮浠g爜錛屾垜鑷繁鍒嗘瀽浜嗕竴涓嬶紝瑙夊緱姣旇搗malloc()鐨勬簮浠g爜鍊掓槸瀹規(guī)槗綆鍗曞緢澶氥傚彧鏄湁涓枒闂紝涓嬮潰鎸囧嚭錛?/p>
鐪嬩竴涓嬪嚱鏁扮浜屽彞錛岃繖鍙ラ潪甯擱噸瑕佸拰鍏抽敭銆傚叾瀹炶繖鍙ュ氨鏄妸鎸囧悜鍙敤絀洪棿鐨勬寚閽堝掑洖鍘伙紝璁╁畠鎸囧悜綆$悊淇℃伅鐨勯偅鍧楃┖闂達(dá)紝鍥犱負(fù)榪欓噷鏄湪鍊間笂鍑忓幓浜嗕竴涓粨鏋勪綋鐨勫ぇ 灝忥紒鍚庨潰閭d竴鍙ree->is_available = 1;鎴戞湁鐐圭撼闂鳳紒鎴戠殑鎯蟲硶鏄細(xì)榪欓噷is_available搴旇鍙槸涓涓爣璁拌屽凡錛佸洜涓轟粠榪欎釜鍙橀噺鐨勫悕縐頒笂鏉ョ湅錛宨s_available 緲昏瘧榪囨潵灝辨槸“鏄彲浠ョ敤”銆備笉瑕佽鎴戝湡錛佹垜瑙夊緱鍙橀噺鍚嶅瓧鍙互鍙嶆槧涓涓彉閲忕殑浣滅敤錛岀壒鍒槸涓ヨ皚鐨勪唬鐮併傝繖鏄簮浠g爜錛屾墍浠ユ垜瑙夊緱緇濆鏄弗璋ㄧ殑錛侊紒榪欎釜鍙橀噺鐨勫? 鏄?錛岃〃鏄庢槸鍙互鐢ㄧ殑絀洪棿錛佸彧鏄繖閲屾垜鎯充簡鎯籌紝濡傛灉鎶婂畠鏀逛負(fù)0鎴栬呮槸鍏朵粬鍊間笉鐭ラ亾浼?xì)鍙戠敓浠涔堜簨錛燂紒浣嗘槸鏈変竴鐐規(guī)垜鍙互鑲畾錛屽氨鏄噴鏀劇粷瀵逛笉浼?xì)閭d箞椤哄埄杩涜锛? 鍥犱負(fù)榪欐槸涓涓爣璁幫紒
褰撶劧錛岃繖閲屽彲鑳借繕鏄湁浜轟細(xì)鏈夌枒闂紝涓轟粈涔堣繖鏍峰氨鍙互閲婃斁鍛紵錛熸垜鍒氭墠涔熸湁榪欎釜鐤戦棶銆傚悗鏉ユ垜鎯沖埌錛岄噴鏀炬槸鎿嶄綔緋葷粺鐨勪簨錛岄偅涔堝氨free()榪欎釜婧愪唬鐮佹潵鐪嬶紝 浠涔堜篃娌℃湁閲婃斁錛屽鍚э紵浣嗘槸瀹冪‘瀹炴槸紜畾浜嗙鐞嗕俊鎭殑閭e潡鍐呭瓨鐨勫唴瀹廣傛墍浠ワ紝free()鍙槸璁板綍浜嗕竴浜涗俊鎭紝鐒跺悗鍛婅瘔鎿嶄綔緋葷粺閭e潡鍐呭瓨鍙互鍘婚噴鏀撅紝鍏蜂綋 鎬庝箞鍛婅瘔鎿嶄綔緋葷粺鐨勬垜涓嶆竻妤氾紝浣嗘垜瑙夊緱榪欎釜宸茬粡瓚呭嚭浜嗘垜榪欑瘒鏂囩珷鐨勮璁鴻寖鍥翠簡銆?/p>
閭d箞錛屾垜涔嬪墠鏈変釜閿欒鐨勮璇嗭紝灝辨槸璁や負(fù)鎸囧悜閭e潡鍐呭瓨鐨勬寚閽堜笉綆$Щ鍒伴偅鍧楀唴瀛樹腑鐨勫摢涓綅緗兘鍙互閲婃斁閭e潡鍐呭瓨錛佷絾鏄紝榪欐槸澶ч敊鐗歸敊錛侀噴鏀炬槸涓嶅彲浠ラ噴鏀句竴閮ㄥ垎 鐨勶紒棣栧厛榪欑偣搴旇瑕佹槑鐧姐傝屼笖錛屼粠free()鐨勬簮浠g爜鐪嬶紝ptr鍙兘鎸囧悜鍙敤絀洪棿鐨勯鍦板潃錛屼笉鐒?dòng)灱屽噺鍘痪l撴瀯浣撳ぇ灝忎箣鍚庝竴瀹氫笉鏄寚鍚戠鐞嗕俊鎭┖闂寸殑棣栧湴 鍧銆傛墍浠ワ紝瑕佺‘淇濇寚閽堟寚鍚戝彲鐢ㄧ┖闂寸殑棣栧湴鍧錛佷笉淇″悧錛熻嚜宸卞彲浠ュ啓涓涓▼搴忕劧鍚庣Щ鍔ㄦ寚鍚戝彲鐢ㄧ┖闂寸殑鎸囬拡錛岀湅紼嬪簭浼?xì)鏈変細(xì)宕╁Q?/p>
鏈鍚庡彲鑳芥兂鍒癿alloc()鐨勬簮浠g爜鐪嬬湅malloc()鍒板簳鏄庝箞鍒嗛厤絀洪棿鐨勶紝榪欓噷闈㈡秹鍙?qiáng)鍒板緢澶氬叾浠栨枤w潰鐨勭煡璇嗭紒鏈夊叴瓚g殑鏈嬪弸鍙互鑷繁鍘諱笅杞芥簮
浠g爜鍘葷湅鐪嬨?/p>
鍥涖佸叧浜庡叾浠栵細(xì)
unsigned long inet_addr (const char *cp);
inet_addr灝嗕竴涓偣鍒嗗崄榪涘埗IP鍦板潃瀛楃涓茶漿鎹㈡垚32浣嶆暟瀛楄〃紺虹殑IP鍦板潃錛堢綉緇滃瓧鑺傞『搴忥級銆?/p>
char* inet_ntoa (struct in_addr in);
inet_ntoa灝嗕竴涓?2浣嶆暟瀛楄〃紺虹殑IP鍦板潃杞崲鎴愮偣鍒嗗崄榪涘埗IP鍦板潃瀛楃涓層?/p>
銆
榪欎袱涓嚱鏁頒簰涓哄弽鍑芥暟
銆
瀛楄妭欏哄簭杞崲
htons()--"Host to Network Short"
htonl()--"Host to Network Long"
ntohs()--"Network to Host Short"
ntohl()--"Network to Host Long"
*娉ㄦ剰:鍦ㄤ綘鐨勬暟鎹斁鍒扮綉緇滀笂鐨勬椂鍊欙紝紜俊瀹冩槸緗戠粶瀛楄妭欏哄簭
緗戠粶瀛楄妭欏哄簭(澶х瀛楄妭)鍜寈86鏈哄櫒瀛楄妭欏哄簭(灝忕瀛楄妭)
eg:0X3132 鍦▁86涓婃樉紺?1 鍦ㄧ綉緇滀紶杈撲腑涓?2