锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
Java緙栫▼璇█錛堢涓夌増)---Java鍥涘ぇ鍚嶈憲----James Gosling(Java涔嬬埗)
Java緙栫▼鎬濇兂錛堢2鐗?----Java鍥涘ぇ鍚嶈憲----Bruce Eckel
Java緙栫▼鎬濇兂錛堢3鐗?----Java鍥涘ぇ鍚嶈憲----------------Bruce Eckel
JAVA 2鏍稿績鎶鏈?鍗稩錛氬熀紜鐭ヨ瘑錛堝師涔︾7鐗堬級---Java鍥涘ぇ鍚嶈憲-----Cay Horstmann
JAVA 2鏍稿績鎶鏈?鍗稩I錛氶珮綰х壒鎬э紙鍘熶功絎?鐗?----Java鍥涘ぇ鍚嶈憲-----Cay Horstmann
Effective Java涓枃鐗?-----Java鍥涘ぇ鍚嶈憲--------Joshua Bloch
綺鵑歋truts:鍩轟簬MVC鐨凧ava Web璁捐涓庡紑鍙?--瀛欏崼鐞?
綺鵑欻ibernate錛欽ava瀵硅薄鎸佷箙鍖栨妧鏈瑙?--瀛欏崼鐞?
Tomcat涓嶫ava Web寮鍙戞妧鏈瑙?-----------瀛欏崼鐞?
Java涓庢ā寮?-----------------------------闃庡畯
2銆乧#
C#紼嬪簭璁捐-------Charles Petzold“windows緙栫▼娉板北鍖楁枟”---C#璇█“鍊氬ぉ灞犻緳鍙屽墤”
C# Primer涓枃鐗?-------Stanley B.Lippman---C#璇█“鍊氬ぉ灞犻緳鍙屽墤”
.NET妗嗘灦紼嬪簭璁捐錛堜慨璁㈢増)--------Jeffrey Richter“windows緙栫▼娉板北鍖楁枟”---.NET騫沖彴鍥涘ぇ澶╃帇
c#Windows紼嬪簭璁捐----------Charles Petzold“windows緙栫▼娉板北鍖楁枟”------.NET騫沖彴鍥涘ぇ澶╃帇
.NET紼嬪簭璁捐鎶鏈唴騫?------------Jeff Prosise---.NET騫沖彴鍥涘ぇ澶╃帇
.NET鏈川璁?-絎?鍗鳳細鍏叡璇█榪愯搴?涓枃鐗?--------Chris Sells---.NET騫沖彴鍥涘ぇ澶╃帇
3銆丆++
C++紼嬪簭璁捐璇█錛堢壒鍒増)---c++鍏ぇ閲戝垰----Bjarne Stroustrup“C++涔嬬埗”
C++ Primer (絎?鐗?涓枃鐗?---c++鍏ぇ閲戝垰---Stanley B.Lippman
C++ Primer (絎?鐗?涓枃鐗?---c++鍏ぇ閲戝垰---Stanley B.Lippman
C++鏍囧噯紼嬪簭搴撯旇嚜淇暀紼嬩笌鍙傝冩墜鍐?-c++鍏ぇ閲戝垰--Nicolai M.Josuttis
C++璇█鐨勮璁″拰婕斿寲-----c++鍏ぇ閲戝垰----Bjarne Stroustrup“C++涔嬬埗”
娣卞害鎺㈢儲C++瀵硅薄妯″瀷---c++鍏ぇ閲戝垰----Stanley B.Lippman
Essential C++涓枃鐗?--c++鍏ぇ閲戝垰---Stanley B.Lippman
Effective C++涓枃鐗?2nd Edition-----c++鍏ぇ閲戝垰------Scott Meyers
More Effective C++涓枃鐗?---c++鍏ぇ閲戝垰------Scott Meyers
C++緙栫▼鎬濇兂錛堢2鐗堬級 絎?鍗鳳細鏍囧噯C++瀵煎紩--------Bruce Eckel
C++緙栫▼鎬濇兂錛堢2鐗堬級絎?鍗鳳細瀹炵敤緙栫▼鎶鏈?--------Bruce Eckel
C++紼嬪簭璁捐--------------------------璋旦寮?
C++ 紼嬪簭璁捐鏁欑▼(絎?鐗?--------------閽辮兘
C++ Primer Plus(絎簲鐗?涓枃鐗?--Stephen Prata
騫垮崥濡傚洓搴撳叏涔he c++ programming language銆乧++ Primer
娣卞ゥ濡傚北閲嶆按澶岻nside the c++ object model
紼嬪簭搴撳ぇ鍏═he c++ standard libray
宸ョ▼緇忛獙涔嬬Н绱疎ffective c++銆丮ore Effective c++銆丒xceptional c++
c++鍏ぇ閲戝垰錛?
1銆丒ssentital c++---lippman---C++涔嬬埗錛屾梺鏋濇殏鐣ワ紝涓繪敾鏍稿績錛岃交钖勭煭灝忥紝鍒濆鑰?
2銆乀he c++ programming language----C++涔嬬埗錛屾妧鏈潈濞侊紝鐢ㄨ瘝娣卞郴錛屾濇兂娣辮繙錛宑++鐧劇鍏ㄤ功浠h〃
3銆乧++ Primer----lippman---綰墊í涔﹀競鍗佹暟騫達紝c++鏈浣蟲暀鏈紝c++鐧劇鍏ㄤ功浠h〃銆?
4銆両nside the c++ object model-----lippman----鎻ずc++搴曞眰錛岄潪甯稿ソ錛岄潪甯擱毦銆?
5銆丒ffective c++-----閫氳繃50涓紪紼嬪疄渚嬶紝灞曠ず涓撳緇忛獙錛岃鏂囨湁瓚o紝娣卞嫻呭嚭銆?
6銆丮ore Effective c++錛嶏紞錛嶏紞閫氳繃35涓紪紼嬪疄渚嬶紝灞曠ず涓撳緇忛獙錛岃鏂囨湁瓚o紝娣卞嫻呭嚭銆?
7銆乀he c++ standard libray錛嶏紞錛峜++鏍囧噯搴撶殑鐧劇鍏ㄤ功銆?
8銆佽璁℃ā寮忥細鍙鐢ㄩ潰鍚戝璞¤蔣浠剁殑鍩虹
4銆乧
C紼嬪簭璁捐璇█錛堢2鐗?#183;鏂扮増錛?--C璇█“鍊氬ぉ灞犻緳鍙屽墤”---Brian W.Kernighan“C璇█涔嬬埗”
C Primer Plus涓枃鐗堬紙絎簲鐗堬級--------C璇█“鍊氬ぉ灞犻緳鍙屽墤”---Stephen Prata
C紼嬪簭璁捐錛堢涓夌増錛?--------------------------璋旦寮?
C璇█澶у叏錛堢鍥涚増錛?--------------------------HERBERT SCHILDT
C璇█鎺ュ彛涓庡疄鐜幫細鍒涘緩鍙噸鐢ㄨ蔣浠剁殑鎶鏈?------------DAVID R.HANSON
C璇█鍙傝冩墜鍐?鍘熶功絎?鐗?--------------------------Samuel P.Harbison
C紼嬪簭璁捐鏁欑▼---------------------------------H.M.Deitel/P.J.Deitel
C闄烽槺涓庣己闄?----------------------------------Andrew Koenig
5銆乂B
Visual Basic .NET鎶鏈唴騫?----VB緙栫▼涓夊墤瀹?----------Francesco Balena“vb棣栧腑澶у笀”
Windows紼嬪簭璁捐-Visual Basic.NET璇█鎻忚堪--VB緙栫▼涓夊墤瀹?----Charles Petzold“windows緙栫▼娉板北
鍖楁枟”---
.NET妗嗘灦紼嬪簭璁捐錛歏isual Basic.NET璇█鎻忚堪--VB緙栫▼涓夊墤瀹?-Jeffrey Richter“windows緙栫▼娉板北鍖?
鏂?#8221;---錛孎rancesco Balena“vb棣栧腑澶у笀”
Visual Basic 6緙栫▼鎶鏈ぇ鍏?-----------------------Francesco Balena“vb棣栧腑澶у笀”
Visual Basic.NET 浠庡叆闂ㄥ埌綺鵑?------------------------Petroutsos,E.
楂樼駭VISUAL BASIC緙栫▼-----------------------------------MATTHEW CURLAND
6銆丏elphi
Inside VCL(娣卞叆鏍稿績鈥斺擵CL鏋舵瀯鍓栨瀽)----------鏉庣淮
Delphi 7楂樻晥鏁版嵁搴撶▼搴忚璁?-------------鏉庣淮
闈㈠悜瀵硅薄寮鍙戝疄璺典箣璺紙Delphi鐗堬級----------鏉庣淮
7銆乂C
Windows 紼嬪簭璁捐錛堢5鐗堬級-----Charles Petzold“windows緙栫▼娉板北鍖楁枟”---
Windows鏍稿績緙栫▼----------Jeffrey Richter“windows緙栫▼娉板北鍖楁枟”---
Windows楂樼駭緙栫▼鎸囧崡---------Jeffrey Richter“windows緙栫▼娉板北鍖楁枟”---
娣卞叆嫻呭嚭MFC錛堢浜岀増錛?----“MFC鍥涘ぇ澶╃帇”-------渚嵎
MFC Windows紼嬪簭璁捐錛堢2鐗?---MFC鍥涘ぇ澶╃帇”---------Jeff Prosise
Visual C++ 鎶鏈唴騫曪紙絎?鐗?--MFC鍥涘ぇ澶╃帇”--------David Kruglinski
娣卞叆瑙f瀽MFC-------------MFC鍥涘ぇ澶╃帇”-----------George Shepherd
Visual C++.NET 鎶鏈唴騫曪紙絎?鐗?-MFC鍥涘ぇ澶╃帇”------------David Kruglinski
8銆乿f
Visual Foxpro紼嬪簭璁捐鍙傝冩墜鍐?------------------寮犳椽涓?
涓撳闂ㄨ瘖鈥斺擵isual FoxPro寮鍙戠瓟鐤?60闂?------------------寮犳椽涓?
Visual FoxPro 6.0/9.0瑙e喅鏂規涓庤寖渚嬪ぇ鍏?------------------寮犳椽涓?
Visual FoxPro杞歡寮鍙戞ā寮忎笌搴旂敤妗堜緥-------------------寮犳椽涓?
9銆侀粦瀹?
搴旂敤瀵嗙爜瀛?鍗忚綆楁硶涓嶤婧愮▼搴?----------Bruce Schneier
緗戠粶淇℃伅瀹夊叏鐨勭湡鐩?----------Bruce Schneier
榛戝澶ф洕鍏夛細緗戠粶瀹夊叏鏈哄瘑涓庤В鍐蟲柟妗堬紙絎?鐗堬級--------STUART MCCLURE
杞歡鍔犲瘑鎶鏈唴騫?-----------鐪嬮洩瀛﹂櫌
鍔犲瘑涓庤В瀵嗏斺旇蔣浠朵繚鎶ゆ妧鏈笌瀹屽叏瑙e喅鏂規------------鐪嬮洩瀛﹂櫌
鍔犲瘑涓庤В瀵嗭紙絎簩鐗堬級--------孌甸挗
10銆佹眹緙?
Intel寰鐞嗗櫒緇撴瀯銆佺紪紼嬩笌鎺ュ彛錛堢鍏増錛?--------Barry B. Brey
80*86銆佸鑵炬満姹囩紪璇█紼嬪簭璁捐---------Barry B. Brey
Windows鐜涓?2浣嶆眹緙栬璦紼嬪簭璁捐錛堢2鐗?-----------緗椾簯褰?
IBM-PC姹囩紪璇█紼嬪簭璁捐錛堢2鐗堬級 鏈功鏄浗鍐呬紭縐鏁欐潗--------娌堢編鏄?娓╁啲濠?
IBM PC姹囩紪璇█紼嬪簭璁捐錛堢浜旂増錛?榪欐湰涔︾睄鏄浗澶栦紭縐鏁欐潗-------PETER ABEL钁?娌堢編鏄?娓╁啲铦夎瘧
11銆侀┍鍔ㄥ紑鍙?
Windows WDM璁懼椹卞姩紼嬪簭寮鍙戞寚鍗?----------------------------------- Chris Cant
Windows 2000/XP WDM璁懼椹卞姩紼嬪簭寮鍙?絎?鐗?--------------------------姝﹀畨娌?
WINDOWS 2000/XP WDM璁懼椹卞姩紼嬪簭寮鍙?------------------------------- 姝﹀畨娌?
12銆佺綉緇?
璁$畻鏈虹綉緇滅鍥涚増涓枃鐗?---緗戠粶緙栫▼涓夊墤瀹?-------------Andrew S.Tanenbaum
TCP/IP璇﹁В3鍗鋒湰--------------------Richard Stevens----緗戠粶緙栫▼涓夊墤瀹?
UNIX緗戠粶緙栫▼2鍗鋒湰--------------------Richard Stevens----緗戠粶緙栫▼涓夊墤瀹?
鐢═CP/IP榪涜緗戦檯浜掕仈-----------Douglas E. Comer
楂樼駭TCP/IP緙栫▼-------------------Jon C. Snader
C++緗戠粶緙栫▼-----------------------Douglas Schmidt
UNIX鐜楂樼駭緙栫▼錛堢2鐗?--------------------Richard Stevens
13銆佺畻娉?
璁$畻鏈虹▼搴忚璁¤壓鏈?------Donald.E.Knuth----------綆楁硶“鍊氬ぉ灞犻緳”鍙屽墤
綆楁硶瀵艱-----------------Thomas H. Cormen--------綆楁硶“鍊氬ぉ灞犻緳”鍙屽墤
紱繪暎鏁板鍙婂叾搴旂敤----------Kenneth H.Rosen
鍏蜂綋鏁板鈥旇綆楁満縐戝鍩虹--------Donald.E.Knuth
14銆佸浘褰㈢紪紼?
Windows 鍥懼艦緙栫▼----------------FENG YUAN --鍥懼艦緙栫▼鐣岀殑Charles Petzold涔嬩功
15銆佹暟鎹粨鏋?
鏁版嵁緇撴瀯 C++璇█鎻忚堪銆?8.00(Data Structures C++) William Ford,William Topp 鍒樺崼涓?娌堝畼鏋?
鏁版嵁緇撴瀯綆楁硶涓庡簲鐢?C++璇█鎻忚堪銆?9.00Sartej Sahni 姹瘲鏋?瀛欐檽涓滅瓑鏈烘宸ヤ笟鍑虹増紺?
16銆佽蔣浠跺伐紼?
璁捐妯″紡--鍙鐢ㄩ潰鍚戝璞¤蔣浠剁殑鍩虹
閲嶆瀯鈥旀敼鍠勬棦鏈変唬鐮佺殑璁捐
17銆佹搷浣滅郴緇?
娣卞叆鐞嗚В璁$畻鏈虹郴緇燂紙淇鐗堬級-------RANDAL E.BRYANT
18銆乁nix
UNIX 緗戠粶緙栫▼ 鍗稩 濂楁帴瀛楄仈緗慉PI錛堣嫳鏂囩増 絎笁鐗?
UNIX 緙栫▼鑹烘湳
UNIX鐜楂樼駭緙栫▼錛堣嫳鏂囧獎鍗扮2鐗?----UNIX緙栫▼“鍦g粡
UNIX鐜楂樼駭緙栫▼錛堣嫳鏂囧獎鍗扮増錛夛紙絎?鐗堬級
99-UNIX鐜楂樼駭緙栫▼錛堢2鐗堬級
UNIX鐜楂樼駭緙栫▼錛堢2鐗?---UNIX緙栫▼“鍦g粡
UNIX緗戠粶緙栫▼ 絎?鍗鳳細濂楁帴鍙PI錛堢3鐗堬級
UNIX緗戠粶緙栫▼鍗?錛氳繘紼嬮棿閫氫俊錛堢2鐗堬級錛堣嫳鏂囧獎鍗扮増錛?
UNIX 緗戠粶緙栫▼錛堢浜岀増錛夌2鍗鳳細榪涚▼闂撮氫俊
UNIX緙栫▼鐜
UNIX 緗戠粶緙栫▼ 鍗稩 濂楁帴瀛楄仈緗慉PI錛堣嫳鏂囩増 絎笁鐗?
UNIX緋葷粺緙栫▼
UNIX鐜楂樼駭緙栫▼
UNIX鐜楂樼駭緙栫▼錛堣嫳鏂囧獎鍗扮増
88-LINUX鍐呮牳鍒嗘瀽鍙婄紪紼?
UNIX 緗戠粶緙栫▼ 鍗稩 濂楁帴瀛楄仈緗慉PI錛堣嫳鏂囩増 絎笁鐗堬級
UNIX緗戠粶緙栫▼ 絎?鍗鳳細濂楁帴鍙PI錛堢3鐗堬級
UNIX 緗戠粶緙栫▼錛堢浜岀増錛夌2鍗鳳細榪涚▼闂撮氫俊
UNIX緗戠粶緙栫▼鍗?錛氳繘紼嬮棿閫氫俊錛堢2鐗堬級錛堣嫳鏂囧獎鍗扮増錛?
UNIX 緗戠粶緙栫▼錛堢2鐗堬級絎?鍗鳳細濂楁帴鍙PI鍜孹/Open 浼犺緭鎺ュ彛API
UNIX緗戠粶緙栫▼錛堝嵎1錛夛細榪炵綉鐨凙PLS錛氬鎺ュ瓧涓嶺TI錛堢浜岀増)錛堣嫳鏂囧獎鍗扮増錛?
UNIX鐜楂樼駭緙栫▼
UNIX 鐜楂樼駭緙栫▼錛堣嫳鏂囩増錛?
UNIX鐜楂樼駭緙栫▼錛堢2鐗堬級
Unix鎶鏈墜鍐?
19銆丩inux
Linux鍐呮牳璁捐涓庡疄鐜?
Linux鍐呮牳瀹屽叏娉ㄩ噴
LINUX鍐呮牳鍒嗘瀽鍙婄紪紼?
GNU/Linux 緙栫▼鎸囧崡錛堢浜岀増錛?
Linux璁懼椹卞姩紼嬪簭錛堢涓夌増錛?
宓屽叆寮忚璁″強Linux椹卞姩寮鍙戞寚鍗椻斺斿熀浜嶢RM 9澶勭悊鍣?
Linux璁懼椹卞姩紼嬪簭 絎笁鐗堬紙鑻辨枃褰卞嵃鐗堬級
Linux鍐呮牳璁捐涓庡疄鐜幫紙絎?鐗堬級
Linux鍐呮牳璁捐涓庡疄鐜幫紙鑻辨枃褰卞嵃鐗堬級錛堢2鐗堬級
linux鎶鏈墜鍐?
20銆佹父鎴忕紪紼?
Windows娓告垙緙栫▼澶у笀鎶宸э紙絎簩鐗?
娓告垙涔嬫梾--鎴戠殑緙栫▼鎰熸偀
OpenGL瓚呯駭瀹濆吀錛氱涓夌増
OpenGL緙栫▼鎸囧崡錛堢鍥涚増錛?
Java 娓告垙楂樼駭緙栫▼
J2ME鎵嬫満娓告垙緙栫▼鍏ラ棬
娓告垙涔嬫梾鈥斺旀垜鐨勭紪紼嬫劅鎮?
娓告垙寮鍙戜腑鐨勪漢宸ユ櫤鑳斤紙鑻辨枃褰卞嵃鐗堬級
3D娓告垙錛氬嵎2 鍔ㄧ敾涓庨珮綰у疄鏃舵覆鏌撴妧鏈?
闈㈠悜瀵硅薄鐨勬父鎴忓紑鍙?
Java 娓告垙楂樼駭緙栫▼
3D娓告垙緙栫▼澶у笀鎶宸?
娓告垙緙栫▼綺劇補
闈㈠悜瀵硅薄鐨勬父鎴忓紑鍙?
3D娓告垙 鍗?錛氬疄鏃舵覆鏌撲笌杞歡鎶鏈?
3D娓告垙錛氬嵎2 鍔ㄧ敾涓庨珮綰у疄鏃舵覆鏌撴妧…
J2ME鎵嬫満娓告垙緙栫▼鍏ラ棬
Direct3D娓告垙緙栫▼鍏ラ棬鏁欑▼錛堢浜岀増…
21銆佺Щ鍔ㄥ紑鍙?
Windows Mobile鎵嬫満搴旂敤寮鍙?
SYMBIAN OS C++鎵嬫満搴旂敤寮鍙?
68-Windows Mobile鎵嬫満搴旂敤寮鍙?-鍌呮洣 榻愬畤 寰愰獜
48-SYMBIAN OS C++鎵嬫満搴旂敤寮鍙?錛堢2鍗鳳級------------------RICHARD HARRISON钁?鍛ㄨ壇蹇?鐜嬩集嬈h瘧
68-SYMBIAN OS C++鎵嬫満搴旂敤寮鍙?--------------RICHARD HARRISON钁?鍛ㄨ壇蹇犺瘧
Windows CE.net鍐呮牳瀹氬埗鍙婂簲鐢ㄧ▼搴忓紑鍙?--------鍛ㄦ瘬鏋?瀹佹潹 闄嗚吹寮?浠樻灄鏋?
宓屽叆寮忕郴緇焀indows CE 寮鍙戞妧宸т笌瀹炰緥--鍌呮洣
Palm OS緙栫▼瀹炶返---緇濈増
22銆佸崟鐗囨満
鍗曠墖鏈鴻交鏉懼叆闂?---------------------------------鍛ㄥ潥(騫沖嚒鑰佸笀)
鍗曠墖鏈哄吀鍨嬫ā鍧楄璁″疄渚嬪鑸?----------------------姹傛槸縐戞妧
渚嬭8051----------------------------------------寮犱箟鍜?闄堟晫鍖?
KEIL CX51 V7.0鍗曠墖鏈洪珮綰ц璦緙栫▼涓?#924;VISION2搴旂敤瀹炶返-----寰愮埍閽?nbsp;
鍗曠墖鏈哄簲鐢ㄧ▼搴忚璁℃妧鏈?淇鐗?--------------------鍛ㄨ埅鎱?
8051鍗曠墖鏈哄疄璺典笌搴旂敤-------------------------------鍚撮噾鎴?
MCS-51緋誨垪鍗曠墖鏈哄疄鐢ㄦ帴鍙f妧鏈?--------------------鏉庡崕
23銆佷覆騫跺彛閫氳
Visual C++/Turbo C涓插彛閫氫俊緙栫▼瀹炶返------------------榫氬緩浼?
VISUAL BASIC涓嶳S-232涓茶閫氫俊鎺у埗錛堟渶鏂扮増錛?---------鑼冮鎬箣
24銆佺數瀛?
鏃犵嚎鐢佃瘑鍥句笌鐢佃礬鏁呴殰鍒嗘瀽杞繪澗鍏ラ棬(絎簩鐗? -------------------鑳℃枌
鏃犵嚎鐢靛厓鍣ㄤ歡媯嫻嬩笌淇悊鎶鏈交鏉懼叆闂紙絎簩鐗堬級 -------------------鑳℃枌
鍥捐〃緇嗚鐢靛瓙鎶鏈瘑鍥?------------------鑳℃枌
鍥捐〃緇嗚鐢靛瓙鍏冨櫒浠?------------------鑳℃枌
鍥捐〃緇嗚鍏冨櫒浠跺強瀹炵敤鐢佃礬-------------------鑳℃枌
鍦–璇█鐨勫涔犱腑錛屽鍐呭瓨綆$悊榪欓儴鍒嗙殑鐭ヨ瘑鎺屾彙灝ゅ叾閲嶈錛佷箣鍓嶅C涓殑malloc()鍜宖ree()涓や釜鍑芥暟鐨勪簡瑙g敋灝戯紝鍙煡閬撳ぇ姒傝鎬庝箞鐢ㄢ斺斿氨鏄痬alloc鐒跺悗free灝變竴鍒嘜K浜嗐傚綋鐒剁幇鍦ㄥ榪欎袱涓嚱鏁扮殑浣撲細涔熶笉瑙佸緱澶氾紝涓嶈繃瀵逛簬鏈枃绔犵涓夐儴鍒嗙殑鍐呭鍊掓槸鏈変簡杞姌鎬х殑璁よ瘑錛屾墍浠ュ啓涓嬭繖綃囨枃绔犱綔涓轟竴涓鐭ヨ瘑鐨勬葷粨銆傝繖綃囨枃绔犱箣鎵浠ュ懡鍚嶄腑鏈変釜“嫻呰皥”鐨勫瓧鐪鹼紝涔熷氨鏄繖涓剰鎬濅簡錛佸笇鏈涘澶у鏈変竴鐐瑰府鍔╋紒
濡傛灉涓嶆壇寰楀お榪滅殑璇濓紙姣斿璇存搷浣滅郴緇熶腑铏氭嫙鍐呭瓨鍜岀墿鐞嗗唴瀛樺浣曡繍鍋氬浣曠鐞嗕箣綾葷殑鐭ヨ瘑絳夛級錛屾垜鎰熻榪欑瘒鏂囩珷搴旇鏄瘮杈冨叏闈㈠湴璋堜簡涓涓媘alloc()鍜宖ree().榪欑瘒鏂囩珷鐢辨祬鍏ユ繁錛堜笉瑙佸緱鏈夊娣憋級鍒嗕笁涓儴鍒嗕粙緇嶄富瑕佸唴瀹廣?/p>
搴熻瘽浜嗛偅涔堝錛屼笅闈㈢珛鍒昏繘鍏ヤ富棰?===============銆嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨嬨?/p>
涓銆乵alloc()鍜宖ree()鐨勫熀鏈蹇典互鍙婂熀鏈敤娉曪細
1銆佸嚱鏁板師鍨嬪強璇存槑錛?/p>
void *malloc(long NumBytes)錛氳鍑芥暟鍒嗛厤浜哊umBytes涓瓧鑺傦紝騫惰繑鍥炰簡鎸囧悜榪欏潡鍐呭瓨鐨勬寚閽堛傚鏋滃垎閰嶅け璐ワ紝鍒欒繑鍥炰竴涓┖鎸囬拡錛圢ULL錛夈?/p>
鍏充簬鍒嗛厤澶辮觸鐨勫師鍥狅紝搴旇鏈夊縐嶏紝姣斿璇寸┖闂翠笉瓚沖氨鏄竴縐嶃?/p>
void free(void *FirstByte)錛?璇ュ嚱鏁版槸灝嗕箣鍓嶇敤malloc鍒嗛厤鐨勭┖闂磋繕緇欑▼搴忔垨鑰呮槸鎿嶄綔緋葷粺錛屼篃灝辨槸閲婃斁浜嗚繖鍧楀唴瀛橈紝璁╁畠閲嶆柊寰楀埌鑷敱銆?/p>
2銆佸嚱鏁扮殑鐢ㄦ硶錛?/p>
鍏跺疄榪欎袱涓嚱鏁扮敤璧鋒潵鍊掍笉鏄緢闅撅紝涔熷氨鏄痬alloc()涔嬪悗瑙夊緱鐢ㄥ浜嗗氨鐢╀簡瀹冩妸瀹冪粰free()浜嗭紝涓句釜綆鍗曚緥瀛愶細
// Code...
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
if (NULL == Ptr){
exit (1);
}
gets(Ptr);
// code...
free(Ptr);
Ptr = NULL;
// code...
灝辨槸榪欐牱錛佸綋鐒訛紝鍏蜂綋鎯呭喌瑕佸叿浣撳垎鏋愪互鍙婂叿浣撹В鍐熾傛瘮濡傝錛屼綘瀹氫箟浜嗕竴涓寚閽堬紝鍦ㄤ竴涓嚱鏁伴噷鐢寵浜嗕竴鍧楀唴瀛樼劧鍚庨氳繃鍑芥暟榪斿洖浼犻掔粰榪欎釜鎸囬拡錛岄偅涔堜篃璁擱噴鏀捐繖鍧楀唴瀛樿繖欏瑰伐浣滃氨搴旇鐣欑粰鍏朵粬鍑芥暟浜嗐?/p>
3銆佸叧浜庡嚱鏁頒嬌鐢ㄩ渶瑕佹敞鎰忕殑涓浜涘湴鏂癸細
A銆佺敵璇蜂簡鍐呭瓨絀洪棿鍚庯紝蹇呴』媯鏌ユ槸鍚﹀垎閰嶆垚鍔熴?/p>
B銆佸綋涓嶉渶瑕佸啀浣跨敤鐢寵鐨勫唴瀛樻椂錛岃寰楅噴鏀撅紱閲婃斁鍚庡簲璇ユ妸鎸囧悜榪欏潡鍐呭瓨鐨勬寚閽堟寚鍚慛ULL錛岄槻姝㈢▼搴忓悗闈笉灝忓績浣跨敤浜嗗畠銆?/p>
C銆佽繖涓や釜鍑芥暟搴旇鏄厤瀵廣傚鏋滅敵璇峰悗涓嶉噴鏀懼氨鏄唴瀛樻硠闇詫紱濡傛灉鏃犳晠閲婃斁閭e氨鏄粈涔堜篃娌℃湁鍋氥傞噴鏀懼彧鑳戒竴嬈★紝濡傛灉閲婃斁涓ゆ鍙婁袱嬈′互涓婁細鍑虹幇閿欒錛堥噴鏀劇┖鎸囬拡渚嬪錛岄噴鏀劇┖鎸囬拡鍏跺疄涔熺瓑浜庡暐涔熸病鍋氾紝鎵浠ラ噴鏀劇┖鎸囬拡閲婃斁澶氬皯嬈¢兘娌℃湁闂錛夈?/p>
D銆佽櫧鐒秏alloc()鍑芥暟鐨勭被鍨嬫槸(void *),浠諱綍綾誨瀷鐨勬寚閽堥兘鍙互杞崲鎴?void *),浣嗘槸鏈濂借繕鏄湪鍓嶉潰榪涜寮哄埗綾誨瀷杞崲錛屽洜涓鴻繖鏍峰彲浠ヨ翰榪囦竴浜涚紪璇戝櫒鐨勬鏌ャ?/p>
浜屻乵alloc()鍒板簳浠庡摢閲屽緱鏉ヤ簡鍐呭瓨絀洪棿錛?/p>
1銆乵alloc()鍒板簳浠庡摢閲屽緱鍒頒簡鍐呭瓨絀洪棿錛熺瓟妗堟槸浠庡爢閲岄潰鑾峰緱絀洪棿銆備篃灝辨槸璇村嚱鏁拌繑鍥炵殑鎸囬拡鏄寚鍚戝爢閲岄潰鐨勪竴鍧楀唴瀛樸傛搷浣滅郴緇熶腑鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛ㄣ傚綋鎿嶄綔緋葷粺鏀跺埌紼嬪簭鐨勭敵璇鋒椂錛屽氨浼氶亶鍘嗚閾捐〃錛岀劧鍚庡氨瀵繪壘絎竴涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡氨灝嗚緇撶偣浠庣┖闂茬粨鐐歸摼琛ㄤ腑鍒犻櫎錛屽茍灝嗚緇撶偣鐨勭┖闂村垎閰嶇粰紼嬪簭銆傚氨鏄繖鏍鳳紒
璇村埌榪欓噷錛屼笉寰椾笉鍙﹀鎻掑叆涓涓皬璇濋錛岀浉淇″ぇ瀹朵篃鐭ラ亾鏄粈涔堣瘽棰樹簡銆備粈涔堟槸鍫嗭紵璇村埌鍫嗭紝鍙堝繊涓嶄綇璇村埌浜嗘爤錛佷粈涔堟槸鏍堬紵涓嬮潰灝卞彟澶栧紑涓皬閮ㄥ垎涓撻棬鑰屽張綆鍗曞湴璇翠竴涓嬭繖涓澶栬瘽錛?/p>
2銆佷粈涔堟槸鍫嗭細鍫嗘槸澶у鍏辨湁鐨勭┖闂達紝鍒嗗叏灞鍫嗗拰灞閮ㄥ爢銆傚叏灞鍫嗗氨鏄墍鏈夋病鏈夊垎閰嶇殑絀洪棿錛屽眬閮ㄥ爢灝辨槸鐢ㄦ埛鍒嗛厤鐨勭┖闂淬傚爢鍦ㄦ搷浣滅郴緇熷榪涚▼ 鍒濆鍖栫殑鏃跺欏垎閰嶏紝榪愯榪囩▼涓篃鍙互鍚戠郴緇熻棰濆鐨勫爢錛屼絾鏄寰楃敤瀹屼簡瑕佽繕緇欐搷浣滅郴緇燂紝瑕佷笉鐒跺氨鏄唴瀛樻硠婕忋?/p>
浠涔堟槸鏍堬細鏍堟槸綰跨▼鐙湁鐨勶紝淇濆瓨鍏惰繍琛岀姸鎬佸拰灞閮ㄨ嚜鍔ㄥ彉閲忕殑銆傛爤鍦ㄧ嚎紼嬪紑濮嬬殑鏃跺欏垵濮嬪寲錛屾瘡涓嚎紼嬬殑鏍堜簰鐩哥嫭绔嬨傛瘡涓嚱鏁伴兘鏈夎嚜宸辯殑鏍堬紝鏍堣鐢ㄦ潵鍦ㄥ嚱鏁頒箣闂翠紶閫掑弬鏁般傛搷浣滅郴緇熷湪鍒囨崲綰跨▼鐨勬椂鍊欎細鑷姩鐨勫垏鎹㈡爤錛屽氨鏄垏鎹S/ESP瀵勫瓨鍣ㄣ傛爤絀洪棿涓嶉渶瑕佸湪楂樼駭璇█閲岄潰鏄懼紡鐨勫垎閰嶅拰閲婃斁銆?
浠ヤ笂鐨勬蹇墊弿榪版槸鏍囧噯鐨勬弿榪幫紝涓嶈繃鏈変釜鍒鍙ヨ鎴戝垹闄わ紝涓嶇煡閬撳洜涓鴻繖鏍瘋屽彉寰椾笉鏍囧噯浜哵_^.
閫氳繃涓婇潰瀵規蹇電殑鎻忚堪錛屽彲浠ョ煡閬擄細
鏍堟槸鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊箋佸眬閮ㄥ彉閲忕殑鍊肩瓑銆傛搷浣滄柟寮忕被浼間簬鏁版嵁緇撴瀯涓殑鏍堛?/p>
鍫嗕竴鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝鑻ヤ笉閲婃斁錛岀▼搴忕粨鏉熸椂鍙兘鐢監S鍥炴敹銆傛敞鎰忚繖閲岃鏄彲鑳斤紝騫墮潪涓瀹氥傛墍浠ユ垜鎯沖啀寮鴻皟涓嬈★紝璁板緱瑕侀噴鏀撅紒
娉ㄦ剰瀹冧笌鏁版嵁緇撴瀯涓殑鍫嗘槸涓ゅ洖浜嬶紝鍒嗛厤鏂瑰紡鍊掓槸綾諱技浜庨摼琛ㄣ傦紙榪欑偣鎴戜笂闈㈢◢寰彁榪囷級
鎵浠ワ紝涓句釜渚嬪瓙錛屽鏋滀綘鍦ㄥ嚱鏁頒笂闈㈠畾涔変簡涓涓寚閽堝彉閲忥紝鐒跺悗鍦ㄨ繖涓嚱鏁伴噷鐢寵浜嗕竴鍧楀唴瀛樿鎸囬拡鎸囧悜瀹冦傚疄闄呬笂錛岃繖涓寚閽堢殑鍦板潃鏄湪鏍堜笂錛屼絾鏄畠鎵鎸囧悜鐨勫唴瀹瑰嵈鏄湪鍫嗕笂闈㈢殑錛佽繖涓鐐硅娉ㄦ剰錛佹墍浠ワ紝鍐嶆兂鎯籌紝鍦ㄤ竴涓嚱鏁伴噷鐢寵浜嗙┖闂村悗錛屾瘮濡傝涓嬮潰榪欎釜鍑芥暟錛?/p>
// code...
void Function(void)
{
char *p = (char *)malloc(100 * sizeof(char));
}
灝辮繖涓緥瀛愶紝鍗冧竾涓嶈璁や負鍑芥暟榪斿洖錛屽嚱鏁版墍鍦ㄧ殑鏍堣閿姣佹寚閽堜篃璺熺潃閿姣侊紝鐢寵鐨勫唴瀛樹篃灝變竴鏍瘋窡鐫閿姣佷簡錛佽繖緇濆鏄敊璇殑錛佸洜涓虹敵璇風殑鍐呭瓨鍦ㄥ爢涓婏紝鑰屽嚱鏁版墍鍦ㄧ殑鏍堣閿姣佽窡鍫嗗畬鍏ㄦ病鏈夊暐鍏崇郴銆傛墍浠ワ紝榪樻槸閭e彞璇濓細璁板緱閲婃斁錛?/p>
3銆乫ree()鍒板簳閲婃斁浜嗕粈涔?/p>
榪欎釜闂姣旇緝綆鍗曪紝鍏跺疄鎴戞槸鎯沖拰絎簩澶ч儴鍒嗙殑棰樼洰鐩稿懠搴旇屽凡錛佸搱鍝堬紒free()閲婃斁鐨勬槸鎸囬拡鎸囧悜鐨勫唴瀛橈紒娉ㄦ剰錛侀噴鏀劇殑鏄唴瀛橈紝涓嶆槸鎸囬拡錛佽繖鐐歸潪甯擱潪甯擱噸瑕侊紒鎸囬拡鏄竴涓彉閲忥紝鍙湁紼嬪簭緇撴潫鏃舵墠琚攢姣併傞噴鏀句簡鍐呭瓨絀洪棿鍚庯紝鍘熸潵鎸囧悜榪欏潡絀洪棿鐨勬寚閽堣繕鏄瓨鍦紒鍙笉榪囩幇鍦ㄦ寚閽堟寚鍚戠殑鍐呭鐨勫瀮鍦撅紝鏄湭瀹氫箟鐨勶紝鎵浠ヨ鏄瀮鍦俱傚洜姝わ紝鍓嶉潰鎴戝凡緇忚榪囦簡錛岄噴鏀懼唴瀛樺悗鎶婃寚閽堟寚鍚慛ULL錛岄槻姝㈡寚閽堝湪鍚庨潰涓嶅皬蹇冨張琚В寮曠敤浜嗐傞潪甯擱噸瑕佸晩榪欎竴鐐癸紒
濂戒簡錛佽繖涓?#8220;棰樺璇?#8221;緇堜簬璇村畬浜嗐傚氨榪欎箞綆鍗曡涓嬈★紝鐭ラ亾涓ぇ姒傚氨鍙互浜嗭紒涓嬮潰灝辮繘鍏ョ涓変釜閮ㄥ垎錛?/p>
涓夈乵alloc()浠ュ強free()鐨勬満鍒訛細
榪欎釜閮ㄥ垎鎴戜粖澶╂墠鏈変簡鏂扮殑璁よ瘑錛佽屼笖鏄漿鎶樻х殑璁よ瘑錛佹墍浠ワ紝榪欓儴鍒嗗彲鑳戒細鏈夋洿澶氫竴浜涜璇嗕笂鐨勯敊璇紒涓嶅鐨勫湴鏂硅澶у甯繖鎸囧嚭錛?/p>
浜嬪疄涓婏紝浠旂粏鐪嬩竴涓媐ree()鐨勫嚱鏁板師鍨嬶紝涔熻涔熶細鍙戠幇浼間箮寰堢濂囷紝free()鍑芥暟闈炲父綆鍗曪紝鍙湁涓涓弬鏁幫紝鍙鎶婃寚鍚戠敵璇風┖闂寸殑鎸囬拡浼犻掔粰free()涓殑鍙傛暟灝卞彲浠ュ畬鎴愰噴鏀懼伐浣滐紒榪欓噷瑕佽拷韙埌malloc()鐨勭敵璇烽棶棰樹簡銆傜敵璇風殑鏃跺欏疄闄呬笂鍗犵敤鐨勫唴瀛樿姣旂敵璇風殑澶с傚洜涓鴻秴鍑虹殑絀洪棿鏄敤鏉ヨ褰曞榪欏潡鍐呭瓨鐨勭鐞嗕俊鎭傚厛鐪嬩竴涓嬪湪銆奤NIX鐜楂樼駭緙栫▼銆嬩腑絎竷绔犵殑涓孌佃瘽錛?/p>
澶у鏁板疄鐜版墍鍒嗛厤鐨勫瓨鍌ㄧ┖闂存瘮鎵瑕佹眰鐨勮紼嶅ぇ涓浜涳紝棰濆鐨勭┖闂寸敤鏉ヨ褰曠鐞嗕俊鎭斺斿垎閰嶅潡鐨勯暱搴︼紝鎸囧悜涓嬩竴涓垎閰嶅潡鐨勬寚閽堢瓑絳夈傝繖灝辨剰鍛崇潃濡傛灉鍐欒繃涓涓凡鍒嗛厤鍖虹殑灝劇錛屽垯浼氭敼鍐欏悗涓鍧楃殑綆$悊淇℃伅銆傝繖縐嶇被鍨嬬殑閿欒鏄伨闅炬х殑錛屼絾鏄洜涓鴻繖縐嶉敊璇笉浼氬緢蹇氨鏆撮湶鍑烘潵錛屾墍浠ヤ篃灝卞緢闅懼彂鐜般傚皢鎸囧悜鍒嗛厤鍧楃殑鎸囬拡鍚戝悗縐誨姩涔熷彲鑳戒細鏀瑰啓鏈潡鐨勭鐞嗕俊鎭?/p>
浠ヤ笂榪欐璇濆凡緇忕粰浜嗘垜浠竴浜涗俊鎭簡銆俶alloc()鐢寵鐨勭┖闂村疄闄呮垜瑙夊緱灝辨槸鍒嗕簡涓や釜涓嶅悓鎬ц川鐨勭┖闂淬備竴涓氨鏄敤鏉ヨ褰曠鐞嗕俊鎭殑絀洪棿錛屽彟澶栦竴涓氨鏄彲鐢ㄧ┖闂翠簡銆傝岀敤鏉ヨ褰曠鐞嗕俊鎭殑瀹為檯涓婃槸涓涓粨鏋勪綋銆傚湪C璇█涓紝鐢ㄧ粨鏋勪綋鏉ヨ褰曞悓涓涓璞$殑涓嶅悓淇℃伅鏄ぉ緇忓湴涔夌殑浜嬶紒涓嬮潰鐪嬬湅榪欎釜緇撴瀯浣撶殑鍘熷瀷錛?/p>
struct mem_control_block {
int is_available; //榪欐槸涓涓爣璁幫紵
int size; //榪欐槸瀹為檯絀洪棿鐨勫ぇ灝?/p>
};
瀵逛簬size,榪欎釜鏄疄闄呯┖闂村ぇ灝忋傝繖閲屽叾瀹炴垜鏈変釜鐤戦棶錛宨s_available鏄惁鏄竴涓爣璁幫紵鍥犱負鎴戠湅浜唂ree()鐨勬簮浠g爜涔嬪悗瀵硅繖涓彉閲忔劅瑙夋湁鐐圭撼闂鳳紙婧愪唬鐮佸湪涓嬮潰鍒嗘瀽錛夈傝繖閲岃繕璇峰ぇ瀹舵寚鍑猴紒
鎵浠ワ紝free()灝辨槸鏍規嵁榪欎釜緇撴瀯浣撶殑淇℃伅鏉ラ噴鏀緈alloc()鐢寵鐨勭┖闂達紒鑰岀粨鏋勪綋鐨勪袱涓垚鍛樼殑澶у皬鎴戞兂搴旇鏄搷浣滅郴緇熺殑浜嬩簡銆備絾鏄繖閲屾湁涓涓棶棰橈紝malloc()鐢寵絀洪棿鍚庤繑鍥炰竴涓寚閽堝簲璇ユ槸鎸囧悜絎簩縐嶇┖闂達紝涔熷氨鏄彲鐢ㄧ┖闂達紒涓嶇劧錛屽鏋滄寚鍚戠鐞嗕俊鎭┖闂寸殑璇濓紝鍐欏叆鐨勫唴瀹瑰拰緇撴瀯浣撶殑綾誨瀷鏈夊彲鑳戒笉涓鑷達紝鎴栬呬細鎶婄鐞嗕俊鎭睆钄芥帀錛岄偅灝辨病娉曢噴鏀懼唴瀛樼┖闂翠簡錛屾墍浠ヤ細鍙戠敓閿欒錛侊紙鎰熻鑷繁榪欓噷璇寸殑鏄簾璇濓級
濂戒簡錛佷笅闈㈢湅鐪媐ree()鐨勬簮浠g爜錛屾垜鑷繁鍒嗘瀽浜嗕竴涓嬶紝瑙夊緱姣旇搗malloc()鐨勬簮浠g爜鍊掓槸瀹規槗綆鍗曞緢澶氥傚彧鏄湁涓枒闂紝涓嬮潰鎸囧嚭錛?/p>
// code...
void free(void *ptr)
{
struct mem_control_block *free;
free = ptr - sizeof(struct mem_control_block);
free->is_available = 1;
return;
}
鐪嬩竴涓嬪嚱鏁扮浜屽彞錛岃繖鍙ラ潪甯擱噸瑕佸拰鍏抽敭銆傚叾瀹炶繖鍙ュ氨鏄妸鎸囧悜鍙敤絀洪棿鐨勬寚閽堝掑洖鍘伙紝璁╁畠鎸囧悜綆$悊淇℃伅鐨勯偅鍧楃┖闂達紝鍥犱負榪欓噷鏄湪鍊間笂鍑忓幓浜嗕竴涓粨鏋勪綋鐨勫ぇ灝忥紒鍚庨潰閭d竴鍙ree->is_available = 1;鎴戞湁鐐圭撼闂鳳紒鎴戠殑鎯蟲硶鏄細榪欓噷is_available搴旇鍙槸涓涓爣璁拌屽凡錛佸洜涓轟粠榪欎釜鍙橀噺鐨勫悕縐頒笂鏉ョ湅錛宨s_available 緲昏瘧榪囨潵灝辨槸“鏄彲浠ョ敤”銆備笉瑕佽鎴戝湡錛佹垜瑙夊緱鍙橀噺鍚嶅瓧鍙互鍙嶆槧涓涓彉閲忕殑浣滅敤錛岀壒鍒槸涓ヨ皚鐨勪唬鐮併傝繖鏄簮浠g爜錛屾墍浠ユ垜瑙夊緱緇濆鏄弗璋ㄧ殑錛侊紒榪欎釜鍙橀噺鐨勫兼槸1錛岃〃鏄庢槸鍙互鐢ㄧ殑絀洪棿錛佸彧鏄繖閲屾垜鎯充簡鎯籌紝濡傛灉鎶婂畠鏀逛負0鎴栬呮槸鍏朵粬鍊間笉鐭ラ亾浼氬彂鐢熶粈涔堜簨錛燂紒浣嗘槸鏈変竴鐐規垜鍙互鑲畾錛屽氨鏄噴鏀劇粷瀵逛笉浼氶偅涔堥『鍒╄繘琛岋紒鍥犱負榪欐槸涓涓爣璁幫紒
褰撶劧錛岃繖閲屽彲鑳借繕鏄湁浜轟細鏈夌枒闂紝涓轟粈涔堣繖鏍峰氨鍙互閲婃斁鍛紵錛熸垜鍒氭墠涔熸湁榪欎釜鐤戦棶銆傚悗鏉ユ垜鎯沖埌錛岄噴鏀炬槸鎿嶄綔緋葷粺鐨勪簨錛岄偅涔堝氨free()榪欎釜婧愪唬鐮佹潵鐪嬶紝浠涔堜篃娌℃湁閲婃斁錛屽鍚э紵浣嗘槸瀹冪‘瀹炴槸紜畾浜嗙鐞嗕俊鎭殑閭e潡鍐呭瓨鐨勫唴瀹廣傛墍浠ワ紝free()鍙槸璁板綍浜嗕竴浜涗俊鎭紝鐒跺悗鍛婅瘔鎿嶄綔緋葷粺閭e潡鍐呭瓨鍙互鍘婚噴鏀撅紝鍏蜂綋鎬庝箞鍛婅瘔鎿嶄綔緋葷粺鐨勬垜涓嶆竻妤氾紝浣嗘垜瑙夊緱榪欎釜宸茬粡瓚呭嚭浜嗘垜榪欑瘒鏂囩珷鐨勮璁鴻寖鍥翠簡銆?/p>
閭d箞錛屾垜涔嬪墠鏈変釜閿欒鐨勮璇嗭紝灝辨槸璁や負鎸囧悜閭e潡鍐呭瓨鐨勬寚閽堜笉綆$Щ鍒伴偅鍧楀唴瀛樹腑鐨勫摢涓綅緗兘鍙互閲婃斁閭e潡鍐呭瓨錛佷絾鏄紝榪欐槸澶ч敊鐗歸敊錛侀噴鏀炬槸涓嶅彲浠ラ噴鏀句竴閮ㄥ垎鐨勶紒棣栧厛榪欑偣搴旇瑕佹槑鐧姐傝屼笖錛屼粠free()鐨勬簮浠g爜鐪嬶紝ptr鍙兘鎸囧悜鍙敤絀洪棿鐨勯鍦板潃錛屼笉鐒訛紝鍑忓幓緇撴瀯浣撳ぇ灝忎箣鍚庝竴瀹氫笉鏄寚鍚戠鐞嗕俊鎭┖闂寸殑棣栧湴鍧銆傛墍浠ワ紝瑕佺‘淇濇寚閽堟寚鍚戝彲鐢ㄧ┖闂寸殑棣栧湴鍧錛佷笉淇″悧錛熻嚜宸卞彲浠ュ啓涓涓▼搴忕劧鍚庣Щ鍔ㄦ寚鍚戝彲鐢ㄧ┖闂寸殑鎸囬拡錛岀湅紼嬪簭浼氭湁浼氬穿錛?/p>
鏈鍚庡彲鑳芥兂鍒癿alloc()鐨勬簮浠g爜鐪嬬湅malloc()鍒板簳鏄庝箞鍒嗛厤絀洪棿鐨勶紝榪欓噷闈㈡秹鍙婂埌寰堝鍏朵粬鏂歸潰鐨勭煡璇嗭紒鏈夊叴瓚g殑鏈嬪弸鍙互鑷繁鍘諱笅杞芥簮
浠g爜鍘葷湅鐪嬨?/p>
鍥涖佸叧浜庡叾浠栵細
鍏充簬C涓殑malloc()鍜宖ree()鐨勮璁哄氨鍐欏埌榪欓噷鍚э紒鍐欎簡涓変釜閽熷ご錛屾劅瑙夋湁鐐圭瘡錛佸笇鏈涘澶у鏈夋墍甯姪錛佹湁涓嶅鐨勫湴鏂規榪庡ぇ瀹舵寚鍑猴紒鏈鍚庯紝璋㈣阿鍙備笌榪欎釜甯栧瓙璁ㄨ鐨勬墍鏈夋湅鍙嬶紝甯栧瓙錛?a >http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=81781&page=1銆?br>
|
鏈変簡malloc/free涓轟粈涔堣繕瑕乶ew/delete 錛?br> malloc涓巉ree鏄疌++/C璇█鐨勬爣鍑嗗簱鍑芥暟錛宯ew/delete鏄疌++鐨勮繍綆楃銆傚畠浠兘鍙敤浜庣敵璇峰姩鎬佸唴瀛樺拰閲婃斁鍐呭瓨銆?br> |
#include <iostream>
using namespace std;

typedef struct node
{
int key;
int data;
struct node *lchild,*rchild;
};
node* bt=NULL;

int insertbst(node *&p,int k)
{
if (p==NULL)
{
p=(node*)malloc(sizeof(node));
p->key=k;
p->lchild=p->rchild=NULL;
return 1;
}
else if (k==p->key)
{
return 0;
}else if (k<p->key)
{
return insertbst(p->lchild,k);
}else
{
return insertbst(p->rchild,k);
}
}

node* creatbst(int* a,int n)
{
int i=0;
while(i<n)
{
insertbst(bt,a[i]);
++i;
}
return bt;
}

void preorder(node* bt)
{
if (bt!=NULL)
{
cout<<bt->key<<endl;
preorder(bt->lchild);
preorder(bt->rchild);
}
}



int main()
{
int a[5]=
{12,3,4,8,10};
node* bl=new node();
bl=creatbst(a,5);
preorder(bt);
return 0;
}
1 size_t strlen_a(const char * str) {
2 size_t length = 0 ;
3 while (*str++ )
4 ++ length;
5 return length;
6 }
涔熻鍙互紼嶅姞鏀硅繘濡備笅錛?/p>
1 size_t strlen_b(const char * str) {
2 const char *cp = str;
3 while (*cp++ )
4 ;
5 return (cp - str - 1 );
6 }
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/robinfoxnan/archive/2008/07/25/2712030.aspx
class String
{
public:
String(const char *str=NULL); //鏋勯犲嚱鏁?/span>
String(const String &other); //鎷瘋礉鏋勯犲嚱鏁?/span>
~String(void); //鏋愭瀯鍑芥暟
String& operator=(const String &other); //絳夊彿鎿嶄綔絎﹂噸杞?/span>
ShowString();
String::~String()
{
delete [] m_data; //鏋愭瀯鍑芥暟錛岄噴鏀懼湴鍧絀洪棿
}
String::String(const char *str)
{
if (str==NULL)//褰撳垵濮嬪寲涓蹭笉瀛樺湪鐨勬椂鍊欙紝涓?/span>m_data鐢寵涓涓┖闂村瓨鏀?/span>'\0'錛?/span>
{
m_data=new char[1];
*m_data='\0';
}
else//褰撳垵濮嬪寲涓插瓨鍦ㄧ殑鏃跺欙紝涓?/span>m_data鐢寵鍚屾牱澶у皬鐨勭┖闂村瓨鏀捐涓詫紱
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)//鎷瘋礉鏋勯犲嚱鏁幫紝鍔熻兘涓庢瀯閫犲嚱鏁扮被浼箋?/span>
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other)
{
if (this==&other)//褰撳湴鍧鐩稿悓鏃訛紝鐩存帴榪斿洖錛?/span>
return *this;
delete [] m_data;//褰撳湴鍧涓嶇浉鍚屾椂錛屽垹闄ゅ師鏉ョ敵璇風殑絀洪棿錛岄噸鏂板紑濮嬫瀯閫狅紱
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this;
}
String::ShowString()//鐢變簬m_data鏄鏈夋垚鍛橈紝瀵硅薄鍙兘閫氳繃public鎴愬憳鍑芥暟鏉ヨ闂紱
{
cout<<this->m_data<<endl;
}
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
class String
{
public:
String(const char *str=NULL); //鏋勯犲嚱鏁?/span>
String(const String &other); //鎷瘋礉鏋勯犲嚱鏁?/span>
~String(void); //鏋愭瀯鍑芥暟
String& operator=(const String &other); //絳夊彿鎿嶄綔絎﹂噸杞?/span>
ShowString();
String::~String()
{
delete [] m_data; //鏋愭瀯鍑芥暟錛岄噴鏀懼湴鍧絀洪棿
}
String::String(const char *str)
{
if (str==NULL)//褰撳垵濮嬪寲涓蹭笉瀛樺湪鐨勬椂鍊欙紝涓?/span>m_data鐢寵涓涓┖闂村瓨鏀?/span>'\0'錛?/span>
{
m_data=new char[1];
*m_data='\0';
}
else//褰撳垵濮嬪寲涓插瓨鍦ㄧ殑鏃跺欙紝涓?/span>m_data鐢寵鍚屾牱澶у皬鐨勭┖闂村瓨鏀捐涓詫紱
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)//鎷瘋礉鏋勯犲嚱鏁幫紝鍔熻兘涓庢瀯閫犲嚱鏁扮被浼箋?/span>
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other)
{
if (this==&other)//褰撳湴鍧鐩稿悓鏃訛紝鐩存帴榪斿洖錛?/span>
return *this;
delete [] m_data;//褰撳湴鍧涓嶇浉鍚屾椂錛屽垹闄ゅ師鏉ョ敵璇風殑絀洪棿錛岄噸鏂板紑濮嬫瀯閫狅紱
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this;
}
String::ShowString()//鐢變簬m_data鏄鏈夋垚鍛橈紝瀵硅薄鍙兘閫氳繃public鎴愬憳鍑芥暟鏉ヨ闂紱
{
cout<<this->m_data<<endl;
}
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
寮哄埗杞寲鍥涚綾誨瀷鍙兘寰堝浜洪兘甯稿父蹇界暐灝辮薄鎴戜竴鏍鳳紝浣嗘槸鏈夋椂榪樻槸姣旇緝鏈夌敤鐨勩備笉浜嗚В鐨勫緩璁湅鐪嬶紝涓浜涙満鍒舵垜涔熶笉鏄崄鍒嗕簡瑙o紝鍙槸灝嗕竴浜涚敤娉曞啓鍑烘潵璁╁ぇ瀹剁湅鐪嬨?br> 2004-11-27 9:00
寮哄埗杞寲鏃犺浠庤娉曡繕鏄鎰忎笂鐪嬶紝閮芥槸c++涓渶闅劇湅鐨勭壒寰佷箣涓銆備絾鏄熀浜巆椋庢牸鐨勮漿鍖栫殑璇箟鐨勪笉鏄庣‘鎬у強鍏朵竴浜涙綔鍦ㄩ棶棰樸傚己鍒剁被鍨嬭漿鍖栨渶緇堣繕鏄c++鎺ュ彈浜嗐?br>1.static_cast榪愮畻絎﹀彿
static_cast<T>(e),stroustrup璁╂垜浠彲浠ユ妸瀹冪湅鎴愰殣鍚漿鎹㈢殑鏄劇ず鐨勯嗚繍綆椼傝繖涓槸鏈変竴瀹氶亾鐞嗙殑錛屽熀浜庨殣寮忚漿鍖栫殑瀵硅薄綾誨瀷鎴戜滑鍙互浣跨敤static_cast杞寲榪愮畻絎﹀彿銆傚畠鏄潤鎬佺殑媯嫻嬶紝鏃犳硶榪愯鏃舵嫻嬬被鍨嬶紝鍦ㄧ戶鎵夸腑灝や負紿佸嚭銆?br>浣跨敤鑼冨洿
<1>鐢ㄤ簬鎵鏈夌郴緇熺被鍨嬩箣闂磋漿鍖栵紝涓嶈兘鐢ㄤ簬緋葷粺綾誨瀷鎸囬拡綾誨瀷杞寲
double t_d = 0;
int t_i= static_cast<int>(t_d); //鏄悎娉曠殑杞寲
鑰屼紒鍥懼皢double*->int*鏄笉鍏佽鐨?br><2>鐢ㄤ簬緇ф壙綾諱箣闂寸殑杞寲錛堝惈鎸囬拡錛夛紝涓嶈兘鐢ㄤ簬鍏朵粬娌℃湁闅愬紡杞寲鐨勫璞$被鍨嬩箣闂寸殑杞寲
緇ф壙涓句緥:
class x
{
};
class y: public x
{
};
浣跨敤:x t_o_x;
y t_o_y = static_cast<y>(t_o_x); //x* y*杞寲涔熷彲浠ヨ繘琛屽洜涓簒,y緇ф壙鍏?br>//緋伙紝綾誨瀷鍙互鑷姩闅愬紡杞寲浣跨敤
闅愬紡杞寲涓句緥:
class x
{
};
class y
{
public:
y( x i_x ) {}
};
x t_o_x;
y t_o_y = static_cast<y>(t_o_x); //澶у鐪嬪埌y鏋勯犲嚱鏁板彲浠ュ浜巟綾誨瀷闅愬紡杞寲
//鎵浠ュ彲浠ュ皢x->y錛屽鏋滀紒鍥懼皢y->x浼氭姤閿?br>2.reinterpret_cast 榪愮畻
涓昏鐢ㄤ簬瀵逛簬綾誨瀷鎸囬拡綾誨瀷鐨勫己鍒惰漿鍖栵紝some_type* -> special_type*榪欐牱杞寲錛岀被鍨嬩俊鎭彲浠ユ槸涓嶅畬鍏ㄧ殑銆傚畠鍏佽灝嗕換鎰忔寚閽堣漿鍖栧埌鍏朵粬綾誨瀷鎸囬拡錛屼篃鍏佽浠繪剰鏁存暟綾誨瀷鍒頒換鎰忔寚閽堢被鍨嬭漿鍖?BT)銆傝繖鏍峰鑷寸殑緇撴灉鏄瀬鍏朵笉瀹夊叏鐨勶紝涓嶈兘瀹夊叏鐨勫簲鐢ㄤ簬鍏朵粬鐩殑錛岄櫎闈炶漿鍖栧埌鍘熸潵綾誨瀷銆?br><1> 浣跨敤鎵鏈夋暣褰㈠彲浠ヨ漿鍖栦負浠繪剰綾誨瀷鐨勬寚閽?鎸囬拡鏄?瀛楄妭鐨刲ong鐨勪笢涓滐紝閭d箞鏈哄櫒灝辮涓哄悓綾誨瀷灝辨槸鍙互杞寲)
int c;
x* p = reinterpret_cast<x*>(c); //x鏄嚜瀹氫箟鐨勪換鎰忕被鍨嬶紝褰撶劧鍖呮嫭緋葷粺綾誨瀷
<2> 鍙互瀵逛簬浠繪剰綾誨瀷鎸囬拡涔嬮棿杞寲
y* c;
x* p = reinterpret_cast<x*>(c);//x,y浠h〃鎵鏈夎嚜瀹氫箟鎴栫郴緇熺被鍨?br>澶у鍙互鐪嬪埌reinterpret_cast鐨勮漿鍖栨槸鏋佸害鐨勪笉璐熻矗浠葷殑錛屼粬鍙杞寲涓嶆嫻嬫槸鍚﹀彲浠ヨ漿鍖栥?br><3> const_cast榪愮畻絎﹀彿
榪欎釜寰堢畝鍗曚粠鍚嶅瓧澶у鍙互鐪嬪嚭鏉ワ紝浠呬粎涓轟簡鍘繪帀鎴栫潃鍔犱笂const淇グ絎﹀彿銆備絾鏄浜庢湰韜畾涔夋椂涓篶onst鐨勭被鍨嬶紝鍗充嬌浣犲幓鎺塩onst鎬э紝鍦ㄤ綘鎿嶄綔榪欑墖鍐呭鏃跺欎篃瑕佸皬蹇冿紝鍙兘r涓嶈兘w鎿嶄綔錛屽惁鍒欒繕鏄細鍑洪敊銆?br>const char* p = "123";
char* c = const_cast<char*>(p);
c[0] = 1; //琛ㄩ潰涓婇氳繃緙栬瘧鍘繪帀浜哻onst鎬э紝浣嗘槸鎿嶄綔鍏跺湴鍧鏃剁郴緇熶緷鐒朵笉鍏佽榪?br>//涔堝仛銆傝繖鏄竴涓紡媧炲惂
<4> dynamic_cast榪愮畻絎﹀彿
Scott Mayers灝嗗叾鎻忚堪涓虹敤鏉ユ墽琛岀戶鎵夸綋緋諱腑錛氬畨鍏ㄧ殑鍚戜笅杞瀷鎴栬呰法緋昏漿鍨嬪姩浣溿備篃灝辨槸璇翠綘鍙互錛岀敤dynamic_cast灝?鎸囧悜base class鐨勬寚閽堟垨寮曠敤杞瀷涓?鎸囧悜瀛愮被鐨勫璞$殑鎸囬拡鎴栧紩鐢ㄣ?br>class B {}; //polymorphic綾誨瀷鍚玽irtual鎵嶈兘dynamic_cast
class D: public B {}
void f( B* pb )
{
D* pd1 = dynamic_cast<D*>(pb);//濡傛灉pb涓篸綾誨瀷姝g‘榪斿洖錛屽鏋滀笉鏄繑鍥?
D* pd2 = static_cast<D*>(pb); //涓嶇鎬庝箞鏍烽兘榪斿洖鎸囬拡鏈夊彲鑳芥寚鍚戜笉鍚堥傜殑瀵?br>//璞★紝鍥犱負static浠呬粎闈欐佹嫻嬶紝涓嶈兘寰楀埌榪?br>//琛屾椂瀵硅薄鐨勪俊鎭槸鍚︾湡姝d負D綾誨瀷
}
static_cast<>鎻瘑
浣滆咃細Sam NG
璇戣咃細灝忓垁浜?/a>
鍘熸枃閾炬帴錛?a >What static_cast<> is actually doing
鏈枃璁ㄨstatic_cast<> 鍜?reinterpret_cast<>銆?
浠嬬粛
澶у紼嬪簭鍛樺湪瀛++鍓嶉兘瀛﹁繃C錛屽茍涓斾範鎯簬C椋庢牸錛堢被鍨嬶級杞崲銆傚綋鍐機++錛堢▼搴忥級鏃訛紝鏈夋椂鍊欐垜浠湪浣跨敤static_cast<>鍜?reinterpret_cast<>鏃跺彲鑳戒細鏈夌偣妯$硦銆傚湪鏈枃涓紝鎴戝皢璇存槑static_cast<>瀹為檯涓婂仛浜嗕粈涔堬紝騫朵笖鎸囧嚭涓浜涘皢浼氬鑷撮敊璇殑鎯呭喌銆?br>
娉涘瀷錛圙eneric Types錛?/strong>
float f = 12.3;綆鑰岃█涔嬶紝static_cast<> 灝嗗皾璇曡漿鎹紝涓句緥鏉ヨ錛屽float-鍒?integer錛岃宺einterpret_cast<>綆鍗曟敼鍙樼紪璇戝櫒鐨勬剰鍥鵑噸鏂拌冭檻閭d釜瀵硅薄浣滀負鍙︿竴綾誨瀷銆?br>
float* pf = &f;
// static cast<>
// 鎴愬姛緙栬瘧, n = 12
int n = static_cast<int>(f);
// 閿欒,鎸囧悜鐨勭被鍨嬫槸鏃犲叧鐨勶紙璇戞敞錛氬嵆鎸囬拡鍙橀噺pf鏄痜loat綾誨瀷錛岀幇鍦ㄨ琚漿鎹負int綾誨瀷錛?br> //int* pn = static_cast<int*>(pf);
//鎴愬姛緙栬瘧
void* pv = static_cast<void*>(pf);
//鎴愬姛緙栬瘧, 浣嗘槸 *pn2鏄棤鎰忎箟鐨勫唴瀛橈紙rubbish錛?br>
int* pn2 = static_cast<int*>(pv);
// reinterpret_cast<>
//閿欒,緙栬瘧鍣ㄧ煡閬撲綘搴旇璋冪敤static_cast<>
//int i = reinterpret_cast<int>(f);
//鎴愬姛緙栬瘧, 浣嗘槸 *pn 瀹為檯涓婃槸鏃犳剰涔夌殑鍐呭瓨,鍜?*pn2涓鏍?br>
int* pi = reinterpret_cast<int*>(pf);
class CBaseX鎯呭喌1錛氫袱涓棤鍏崇殑綾諱箣闂寸殑杞崲
{
public:
int x;
CBaseX() { x = 10; }
void foo() { printf("CBaseX::foo() x=%d\n", x); }
};
class CBaseY
{
public:
int y;
int* py;
CBaseY() { y = 20; py = &y; }
void bar() { printf("CBaseY::bar() y=%d, *py=%d\n", y, *py);
}
};
class CDerived : public CBaseX, public CBaseY
{
public:
int z;
};
// Convert between CBaseX* and CBaseY*姝e鎴戜滑鍦ㄦ硾鍨嬩緥瀛愪腑鎵璁よ瘑鍒扮殑錛屽鏋滀綘灝濊瘯杞崲涓涓璞″埌鍙︿竴涓棤鍏崇殑綾籹tatic_cast<>灝嗗け璐ワ紝鑰宺einterpret_cast<>灝辨繪槸鎴愬姛“嬈洪獥”緙栬瘧鍣細閭d釜瀵硅薄灝辨槸閭d釜鏃犲叧綾匯?br>
// CBaseX* 鍜?CBaseY*涔嬮棿鐨勮漿鎹?br>
CBaseX* pX = new CBaseX();
// Error, types pointed to are unrelated
// 閿欒錛?綾誨瀷鎸囧悜鏄棤鍏崇殑
// CBaseY* pY1 = static_cast<CBaseY*>(pX);
// Compile OK, but pY2 is not CBaseX
// 鎴愬姛緙栬瘧, 浣嗘槸 pY2 涓嶆槸CBaseX
CBaseY* pY2 = reinterpret_cast<CBaseY*>(pX);
// System crash!!
// 緋葷粺宕╂簝!!
// pY2->bar();
1. CDerived* pD = new CDerived();
2. printf("CDerived* pD = %x\n", (int)pD);
3.
4. // static_cast<> CDerived* -> CBaseY* -> CDerived*
//鎴愬姛緙栬瘧錛岄殣寮弒tatic_cast<>杞崲
5. CBaseY* pY1 = pD;
6. printf("CBaseY* pY1 = %x\n", (int)pY1);
// 鎴愬姛緙栬瘧, 鐜板湪 pD1 = pD
7. CDerived* pD1 = static_cast<CDerived*>(pY1);
8. printf("CDerived* pD1 = %x\n", (int)pD1);
9.
10. // reinterpret_cast
// 鎴愬姛緙栬瘧, 浣嗘槸 pY2 涓嶆槸 CBaseY*
11. CBaseY* pY2 = reinterpret_cast<CBaseY*>(pD);
12. printf("CBaseY* pY2 = %x\n", (int)pY2);
13.
14. // 鏃犲叧鐨?static_cast<>
15. CBaseY* pY3 = new CBaseY();
16. printf("CBaseY* pY3 = %x\n", (int)pY3);
// 鎴愬姛緙栬瘧,灝界 pY3 鍙槸涓涓?"鏂?CBaseY()"
17. CDerived* pD3 = static_cast<CDerived*>(pY3);
18. printf("CDerived* pD3 = %x\n", (int)pD3);
---------------------- 杈撳嚭 ---------------------------
CDerived* pD = 392fb8
CBaseY* pY1 = 392fbc
CDerived* pD1 = 392fb8
CBaseY* pY2 = 392fb8
CBaseY* pY3 = 390ff0
CDerived* pD3 = 390fec
娉ㄦ剰錛氬湪灝咰Derived*鐢ㄩ殣寮?static_cast<>杞崲鍒癈BaseY*錛堢5琛岋級鏃訛紝緇撴灉鏄紙鎸囧悜錛塁Derived*錛堢殑鎸囬拡鍚戝悗錛?鍋忕Щ浜?錛堜釜瀛楄妭錛夛紙璇戞敞錛?涓篿nt綾誨瀷鍦ㄥ唴瀛樹腑鎵鍗犲瓧鑺傛暟錛夈備負浜嗙煡閬搒tatic_cast<> 瀹為檯濡備綍錛屾垜浠笉寰椾笉瑕佹潵鐪嬩竴涓婥Derived鐨勫唴瀛樺竷灞銆?/p>
CDerived鐨勫唴瀛樺竷灞錛圡emory Layout錛?/strong>
濡傚浘鎵紺猴紝CDerived鐨勫唴瀛樺竷灞鍖呮嫭涓や釜瀵硅薄錛孋BaseX 鍜?CBaseY錛岀紪璇戝櫒涔熺煡閬撹繖涓鐐廣傚洜姝わ紝褰撲綘灝咰Derived* 杞崲鍒?CBaseY*鏃訛紝瀹冪粰鎸囬拡娣誨姞4涓瓧鑺傦紝鍚屾椂褰撲綘灝咰BaseY*杞崲鍒癈Derived*鏃訛紝瀹冪粰鎸囬拡鍑忓幓4銆傜劧鑰岋紝鐢氳嚦瀹冨嵆渚夸笉鏄竴涓狢Derived浣犱篃鍙互榪欐牱鍋氥?br>褰撶劧錛岃繖涓棶棰樺彧鍦ㄥ鏋滀綘鍋氫簡澶氱戶鎵挎椂鍙戠敓銆傚湪浣犲皢CDerived杞崲 鍒?CBaseX鏃秙tatic_cast<> 鍜?reinterpret_cast<>鏄病鏈夊尯鍒殑銆?br>
鎯呭喌3錛歷oid*涔嬮棿鐨勫悜鍓嶅拰鍚戝悗杞崲
鍥犱負浠諱綍鎸囬拡鍙互琚漿鎹㈠埌void*錛岃寁oid*鍙互琚悜鍚庤漿鎹㈠埌浠諱綍鎸囬拡錛堝浜巗tatic_cast<> 鍜?reinterpret_cast<>杞崲閮藉彲浠ヨ繖鏍峰仛錛夛紝濡傛灉娌℃湁灝忓績澶勭悊鐨勮瘽閿欒鍙兘鍙戠敓銆?br>
CDerived* pD = new CDerived();
printf("CDerived* pD = %x\n", (int)pD);
CBaseY* pY = pD; // 鎴愬姛緙栬瘧, pY = pD + 4
printf("CBaseY* pY = %x\n", (int)pY);
void* pV1 = pY; //鎴愬姛緙栬瘧, pV1 = pY
printf("void* pV1 = %x\n", (int)pV1);
// pD2 = pY, 浣嗘槸鎴戜滑棰勬湡 pD2 = pY - 4
CDerived* pD2 = static_cast<CDerived*>(pV1);
printf("CDerived* pD2 = %x\n", (int)pD2);
// 緋葷粺宕╂簝
// pD2->bar();
---------------------- 杈撳嚭 ---------------------------
CDerived* pD = 392fb8
CBaseY* pY = 392fbc
void* pV1 = 392fbc
CDerived* pD2 = 392fbc
涓鏃︽垜浠凡緇忚漿鎹㈡寚閽堜負void*錛屾垜浠氨涓嶈兘杞繪槗灝嗗叾杞崲鍥炲師綾匯傚湪涓婇潰鐨勪緥瀛愪腑錛屼粠涓涓獀oid* 榪斿洖CDerived*鐨勫敮涓鏂規硶鏄皢鍏惰漿鎹負CBaseY*鐒跺悗鍐嶈漿鎹負CDerived*銆?
浣嗘槸濡傛灉鎴戜滑涓嶈兘紜畾瀹冩槸CBaseY* 榪樻槸 CDerived*錛岃繖鏃舵垜浠笉寰椾笉鐢╠ynamic_cast<> 鎴杢ypeid[2]銆?br>
娉ㄩ噴錛?/strong>
1. dynamic_cast<>錛屼粠鍙︿竴鏂歸潰鏉ヨ錛屽彲浠ラ槻姝竴涓硾鍨婥BaseY* 琚漿鎹㈠埌CDerived*銆?br>2. dynamic_cast<>闇瑕佺被鎴愪負澶氭侊紝鍗沖寘鎷?#8220;铏?#8221;鍑芥暟錛屽茍鍥犳鑰屼笉鑳芥垚涓簐oid*銆?br>鍙傝冿細
1. [MSDN] C++ Language Reference -- Casting
2. Nishant Sivakumar, Casting Basics - Use C++ casts in your VC++.NET programs
3. Juan Soulie, C++ Language Tutorial: Type Casting
鎺ㄨ崘閾炬帴錛?/strong>濡備綍鍦ㄨ繍琛屾椂紜畾瀵硅薄綾誨瀷錛圧TTI錛?/a>