锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
define涓殑#鍜?#錛?br>錛?錛?鍙互灝哾efine涓殑鍙傛暟杞寲涓哄瓧絎︿覆錛屼緥濡傦細
#define PRINT(x) printf(#x “ is %d”, x);
錛?錛?#鍙互灝哾efine涓殑鍙傛暟杞寲涓烘煇涓爣璇嗙鐨勪竴閮ㄥ垎錛屼緥濡傦細
int tmp_a = 23;
#define PRINT(x) printf(#x “ is %d”, tmp_##x);
define鐨勪綅緗細
瀹忓畾涔夊彲浠ュ嚭鐜板湪鎵鏈夊嚱鏁板閮ㄦ垨鑰呮煇鍑芥暟鍐呴儴錛岄伒寰袱涓鍒欙細
絎竴錛?nbsp;鍐呴儴瀹氫箟瑕嗙洊澶栭儴瀹氫箟銆傚鏋滃叏灞鐨勫畯瀹氫箟涓庢煇鍐呴儴瀹忓畾涔夐噸鍚嶆椂錛孷C6.0緙栬瘧鍣ㄤ細鎻愮ずwarning浣嗕笉鍑洪敊錛屼笖浠ュ唴閮ㄥ畯瀹氫箟涓哄噯銆?br>絎簩錛?nbsp;瀹氫箟鐐瑰悗鍧囧彲浣跨敤錛屼笉浠ュ嚱鏁板唴澶栧垝鍒嗕綔鐢ㄥ煙錛屼粎浠ユ枃鏈腑鍑虹幇浣嶇疆鍓嶅悗鍒掑垎銆?br>
define瑙f瀽欏哄簭錛?br>#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void macrotest(void)
{
printf("%s,",h(f(1,2)));
printf("%s\n",g(f(1,2)));
}
鏈鍚庣瓟妗堟槸錛?2, f(1,2)
鍒嗘瀽錛氳В鏋愪竴涓覆浠庡乏鑷沖彸錛屼竴閬嶄箣鍚庡啀浠庡ご寮濮嬨傛墍浠(f(1,2)) -> g(f(1,2)) -> g(12) -> 12錛岃実(f(1,2)) -> #(f(1,2)) -> f(1,2)銆?br>
define鐨勭己闄鳳細
絎竴錛?nbsp;瀵逛簬鎵鏈夌殑function-like macros錛屾墍鏈夌殑鍙傛暟閮借鎷搗鏉ワ紝浠ラ槻姝acros(a+b)鐨勬儏鍐靛嚭鐜幫紱鑰屼笖瑕佹敞鎰忔槸鍚︽湁綾諱技macros(i++)鐨勬儏鍐靛嚭鐜幫紝闃叉鍦ㄦ枃鏈浛鎹㈠悗i++鎵ц澶氭銆?br>絎簩錛?nbsp;瀹忎笉鍋氱被鍨嬫鏌ワ紝鑰屼笖棰勫鐞嗗睍寮鍚庢秷澶變簬鏃犲艦錛岀紪璇戝嚭閿欎簡寰堥毦鎵懼埌閿欒銆?br>絎笁錛?nbsp;浣跨敤瀹忓悗璇?#8220;鍑芥暟”涓嶈兘鍙栧潃錛屼笉鑳戒綔涓哄嚱鏁版寚閽堜紶閫掔粰鍙︿竴涓嚱鏁般?br>絎洓錛?nbsp;涓鑸嬌鐢╥nline鍑芥暟浠f浛瀹忓嚱鏁幫紝綾諱技鐨勶紝涓鑸嬌鐢╟onst鍙橀噺浠f浛瀹忓彉閲忋?br>
2.strncpy鍜宻trncat
strncpy(dest, src, size);
浣跨敤strncpy(a, b, size)鍑芥暟鏃訛紝鏍規(guī)嵁size鍊煎垎涓ょ鎯呭喌錛?br>絎竴錛宻ize姣斿瓧絎︿覆b闀垮害澶ф椂錛屽皢b瀛楃涓茶祴緇檃錛屽啀灝哸涓璼ize-b.length鐨勫浣欎綅緗祴鍊間負\0銆?br>絎簩錛宻ize姣斿瓧絎︿覆b闀垮害灝忔椂錛屽皢size闀垮害鐨刡瀛愬瓧絎︿覆璧嬬粰a錛屼絾涓嶈嚜鍔ㄥ湪鍚庨潰娣誨姞\0銆?br>
strncat(dest, src, size);
浣跨敤strncat(a, b, size)鍑芥暟鏃訛紝鏍規(guī)嵁size鍊煎垎涓ょ鎯呭喌錛?br>絎竴錛宻ize姣斿瓧絎︿覆b闀垮害澶ф椂錛屽皢b瀛楃涓茶祴緇檃絎竴涓猏0緇撴潫絎﹀錛屽茍鑷姩鍦ㄥ彸闈㈡坊鍔燶0錛屽浣欑殑size-b.length浣嶇疆涓嶈祴鍊箋?br>絎簩錛宻ize姣斿瓧絎︿覆b闀垮害灝忔椂錛屽皢size闀垮害鐨勫瓧絎︿覆璧嬬粰a絎竴涓猏0緇撴潫絎﹀錛屽茍涓旇嚜鍔ㄥ湪鍚庨潰娣誨姞\0銆?br>
3.printf鍜宻canf
printf(“%x, %x, %x”, a, b, c);
printf娉ㄦ剰浜嬮」錛?br>絎竴錛?pirntf鍙傛暟浠庡彸鍚戝乏渚濇鍘嬫爤銆?br>絎簩錛?nbsp;瀛楃涓?×鍜屽悗闈㈠弬鏁頒粠宸﹁嚦鍙充緷嬈℃槧灝勶紝褰撳弬鏁板鍑烘椂鍙拷鐣ヤ笉璁°?br>絎笁錛?nbsp;瀛楃涓?×鍜屽悗闈㈠弬鏁頒粠宸﹁嚦鍙充緷嬈℃槧灝勶紝褰?×澶氬嚭鏃訛紝鎵撳嵃鍑烘潵鐨勭粨鏋滀笉鍙嫻嬶紙鍥犱負VC涓嬪弬鏁頒粠鍙沖悜宸﹀帇鏍堬紝鎵浠ュ鍑虹殑%×鍙兘瀵瑰簲涓嶅彲棰勭煡鐨勫唴瀛橈級銆?br>
鍏朵粬
4.rand()鍑芥暟鐨勬渶澶у彇鍊兼槸0X7fff錛屼篃灝辨槸2鐨?5嬈℃柟-1銆?br>
5.瀵逛簬鏁扮粍char a[100]錛宻izeof(a)鐨勫兼槸100錛岃〃紺烘暟緇勫ぇ灝忥紝鑰宻izeof(&a)鎸夐亾鐞嗘潵璇村簲璇ユ槸4錛岃〃紺烘寚鍚戞暟緇刟鐨勬寚閽堢殑澶у皬錛屼絾鏄煇浜汳SVC鐗堟湰瀵筧rrayName鍜?amp;arrayName鏄笉鍖哄垎鐨勶紝闇瑕佸畨瑁卻p1鐨凪SVC鐨勮ˉ涓佹墠鍙幓鎺夎繖涓猙ug銆?br>
6.C璇█涓紝涓嶅啓榪斿洖綾誨瀷鐨勫嚱鏁幫紝涓鑸粯璁や負int鍨嬶紝鑰孋++涓繀欏繪寚鏄庤繑鍥炵被鍨嬨備絾鍦ㄤ竴鑸殑緙栬瘧鍣ㄥ疄鐜頒腑錛屽彲鑳戒細鍋氭斁瀹藉鐞嗭紝渚嬪VC6.0涓彲浠ユ帴鍙桟++鍑芥暟娌℃湁榪斿洖綾誨瀷錛岄粯璁や負int銆?br>
7.榪斿洖鍊間負鏁扮粍鎸囬拡
濡傛灉鍑芥暟榪斿洖鍊兼槸int(*)[NUM]綾誨瀷錛屼笉鍙啓鎴恑nt(*)[NUM] func() {}鐨勫艦寮忥紝鑰屽簲璇ュ啓鎴愶細
int (*func)() [NUM] {}
鎴栬呬嬌鐢╰ypedef鏉ョ畝鍖栵細
typedef int(*)[NUM] type;
type func() {}
閭d箞錛屽浣曚繚瀛樺嚱鏁扮殑榪斿洖鍊煎憿錛屽叿浣撳涓嬶細
int a[num1][NUM];
int (*b)[NUM] = &a[num2];
b = func();
8.緇撴瀯浣?br>緇撴瀯浣撴湁璧嬪兼搷浣滐紝浣嗘槸娌℃湁姣旇緝鎿嶄綔錛屽彲浠ラ噸杞?=絳夎繖浜涙瘮杈冭繍綆楃錛涘悓鏃訛紝鏈濂藉埆鐢╩emcmp鍑芥暟榪涜緇撴瀯浣撶殑姣旇緝鎿嶄綔錛屽洜涓鴻鑰冭檻鍒扮粨鏋勪綋鐨勫榻愰棶棰橈紝涓斿~鍏呯殑瀛楄妭鏄殢鏈虹殑銆?br>
9.鍑芥暟鎸囬拡
void func() {}
printf(“%p %p %p”, func, &func, *func);
鍏剁粨鏋滄槸涓鏍風殑錛屽師鍥犲湪浜庯細
鍑芥暟鍚嶅氨鏄嚱鏁板悕錛岄櫎浜嗗皯閲忔儏鍐碉紝瀹冧細閫鍖栦負鍑芥暟鎸囬拡錛屽嵆鍙戠敓function-to-pointer杞崲銆俧un鍗曠嫭鏀劇潃鐨勬椂鍊欏氨浼氬彂鐢熼鍖栵紝鑰屽湪&fun鐨勬儏鍐典笅涓嶄細閫鍖栵紝鎵浠ュ崟鐙殑fun鍜?amp;fun鐨勭被鍨嬨佸奸兘涓鏍楓傝?fun鍒欐槸fun鍏堝彂鐢熼鍖栵紝鍙樻垚鍑芥暟鎸囬拡錛?鍙樻垚鍑芥暟綾誨瀷錛岀劧鍚庡啀閫鍖栨垚鍑芥暟鎸囬拡錛屾墍浠ュ嚱鏁扮被鍨嬫庝箞*閮戒竴鏍楓傦紙maybe錛?br>
10.(int&)a鍜?int)a鐨勫尯鍒?br>(int&)a涓嶇粡榪囪漿鎹紝鐩存帴寰楀埌a鍦ㄥ唴瀛樺崟鍏冪殑鍊鹼紱(int)a鍒欐槸a鍦ㄥ唴瀛樹腑鐨勫艱漿鎹㈡垚int綾誨瀷錛岄偅涔堝瓨鍦ㄤ袱縐嶆儏鍐碉細
絎竴錛?nbsp;a綾誨瀷鏄痠nt錛屾鏃?int&)a鍜?int)a鏄浉絳夌殑銆?br>絎簩錛?nbsp;a綾誨瀷鏄痜loat絳夛紝鐢變簬float鍦ㄥ唴瀛樹腑瀛樺偍鐨勫艦寮忔槸絎﹀彿浣?鎸囨暟+灝炬暟錛岃岄樁鐮侀噰鐢ㄥ鐮侊紝涓烘暟閲囩敤婧愮爜錛屼笌int鐨勫瓨鍌ㄥ艦寮忎笉鍚屻?int)a浼氬厛灝嗗唴瀛樹腑鐨勫艱漿鎹㈡垚int綾誨瀷錛岀劧鍚庣粰a錛岃?int&)a鍒欑洿鎺ュ皢鍐呭瓨涓殑鍊肩粰a錛屼笉緇忚繃杞崲錛屾墍浠ユ鏃朵袱鑰呬笉鐩哥瓑銆?br>
windows涓父鐢ㄧ被鍨嬶細
DWORD WINAPI Func1(LPVOID param)

{
cout << "test" << endl;
MessageBox(NULL, "test", "ddd", MB_OK);
return 0;
}
int main()

{
HANDLE p;
DWORD a = 10;
DWORD id = 0;
p = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Func1, &a, 0, &id);
//WaitForSingleObject(p, INFINITE);
return 0;
}鍚庢潵鏌ユ槑鍏蜂綋鍘熷洜涓猴細涓葷嚎紼嬭繍琛屽お蹇紝瀵艱嚧紼嬪簭鍦‵unc1綰跨▼鎵撳嵃璇彞涔嬪墠灝卞凡緇忛鍑轟簡銆傛洿姝f柟娉曚負鍦╩ain涓垱寤虹嚎紼婩unc1鍚庢坊鍔犲悓姝ユ満鍒禬aitForSingleObject(p, INFINITE)銆?br>
#include <iostream>
using namespace std;
int main()

{
string str("fdsfsdaf");
cout << str.c_str(); //str.c_str()鍙互榪愯
//cout << str; //str鏃犳硶榪愯
return 0;
}
涓嶅寘鍚玸tring澶存枃浠舵椂錛宑out<<str鏃犳硶榪愯錛涘綋閲嶆柊鍖呭惈string澶存枃浠跺悗錛宑out<<str榪愯鎴愬姛銆備負浠涔堬紵錛燂紵
鍒濇璁炬兂錛歩ostream澶存枃浠墮棿鎺ュ鍏ヤ簡string澶存枃浠訛紝浣嗘槸鐩稿綋涓閮ㄥ垎鐨剆tring鎿嶄綔瀹氫箟鍦╯tring澶存枃浠朵腑錛屼緥濡傜▼搴忎腑鐨?lt;<鎿嶄綔絎﹂噸杞斤紝涓嶅寘鍚玸tring澶存枃浠剁殑璇濇棤娉曚嬌鐢ㄣ傛墍浠ュ緩璁紪紼嬫椂榪樻槸涓誨姩瀵煎叆string澶存枃浠躲?br>
2.string綾誨瀷澹版槑錛?/strong>
string s;
string s(args);
鍏朵腑args鍏蜂綋鍙傛暟濡備笅錛?br>str
str, len
chars
chars, len
chars, index, len
n, c
b, e
娉ㄦ剰錛氬string鐨勬搷浣滐紝鏃㈠彲浠ョ敤榪唬鍣紝涔熷彲浠ョ敤涓嬫爣錛屽畠姣斿鍣ㄥ叿鏈夋洿澶氱殑鐏墊椿鎬с備互涓嬩嬌鐢╞銆乪鍜宲琛ㄧず榪唬鍣紝pos琛ㄧず涓嬫爣錛宑p琛ㄧず鎸囧悜c綾誨瓧絎︿覆鐨勬寚閽堛?/span>
3.string鎿嶄綔錛?/strong>
=銆乤ssign()錛?br>瀵箂tring瀵硅薄璧嬩互鏂板箋?鍙寵竟鍙互鏄痵tring綾誨瀷銆乧_string綾誨瀷鐢氳嚦鏄?a'榪欐牱鐨勫崟涓瀛楃銆備嬌鐢╝ssign()鍙互鏇寸伒媧葷殑瀵箂tring榪涜璧嬪鹼紝渚嬪錛?br>args鍏蜂綋鍙傛暟濡備笅錛?br>str
str, len
chars
chars, len
chars, index, len
n, c
b, e
swap()錛?br>浜ゆ崲涓や釜瀛楃涓茬殑鍐呭錛屼緥濡俿1.swap(s2)錛屾敞鎰忛噷闈笉鍙互鏄痗_string綾誨瀷銆?br>
+=銆乤ppend(args)銆乸ush_back()錛?br>鍦ㄥ熬閮ㄦ坊鍔犲瓧絎︺?=鍚庨潰鍙互鏄痵tring銆乧_string鐢氳嚦鏄?a'榪欐牱鐨勫崟涓瀛楃銆傚叾涓璦rgs鍏蜂綋鍙傛暟濡備笅錛?br>str
str, len
chars
chars, len
chars, index, len
n, c
b, e
s.push_back('x') //鐢ㄤ簬姣忔澧炲姞涓涓瓧絎︺?br>
insert()錛?br>鍦╯tring鏌愪釜浣嶇疆鎻掑叆瀛楃錛屾彃鍏ヤ綅緗湪緇欏畾鐨勭儲寮曞銆備緥濡俿.insert(4, str)銆傛敞鎰忥紝榪欑褰㈠紡鐨刬nsert()鍑芥暟涓嶆敮鎸佷紶鍏ュ崟涓瓧絎︼紝瑕佹兂浼犲叆鍗曚釜瀛楃蹇呴』鍐欐垚瀛楃涓茬殑褰㈠紡銆?br>s.insert(p, t) //鍦╬鍓嶆彃鍏ュ厓绱爐
s.insert(p, n, t) //鍦╬鍓嶆彃鍏涓猼
s.insert(p, b, e) //b鍜宔鏄凱浠e櫒
s.insert(pos, args)
鍏朵腑args鍏蜂綋鍙傛暟濡備笅錛?br>str
str, len
chars
chars, len
chars, index, len
n, c
b, e
erase()錛氬垹闄ゅ瓧絎︺?br>s.erase(p) //鍒犻櫎p鎸囧悜鐨勫厓绱狅紝榪斿洖鎸囧悜璇ュ厓绱犲悗闈㈠厓绱犵殑榪唬鍣?br>s.erase(b, e) //鍒犻櫎b鍜宔闂寸殑鍏冪礌錛岃繑鍥炴寚鍚戣鍏冪礌鍚庨潰鍏冪礌鐨勮凱浠e櫒
s.erase(pos, len) //鍒犻櫎pos涓嬫爣寮濮嬬殑len涓瓧絎?br>
clear()錛?br>娓呯┖瀛楃錛屼緥濡俿.clear()錛屾晥鏋滅瓑鍚屼簬s=""錛屼絾鏄唴閮ㄦ満鍒舵槸鍚︿竴鏍鋒湭鐭ャ?br>
replace()錛氭浛鎹㈠瓧絎︺?br>s.replace(pos, args)
鍏朵腑args鍏蜂綋鍙傛暟濡備笅錛?br>str
str, len
chars
chars, len
chars, index, len
n, c
b, e
鍚岀悊鎶婂墠涓や釜鍙傛暟鎹㈡垚b鍜宔涔熷彲浠ャ?br>
+錛?br>涓茶仈瀛楃涓層?br>
==銆?=銆?lt;銆?lt;=銆?gt;銆?gt;=銆乧ompare()錛?br>姣旇緝瀛楃涓詫紝鍙互鍦╯tring涓巗tring銆乻tring涓巆_string闂磋繘琛屾瘮杈冿紝渚嬪str1 < str2錛宻 <= "abc"銆俢ompare()鍑芥暟鏀寔澶氬弬鏁板鐞嗭紝鏀寔鐢ㄧ儲寮曞煎拰闀垮害瀹氫綅瀛愪覆鏉ヨ繘琛屾瘮杈冿紝榪斿洖0琛ㄧず鐩哥瓑錛屾鏁拌〃紺哄ぇ浜庯紝璐熸暟琛ㄧず灝忎簬錛屼緥濡傦細
s.compare("abcd")
s.compare(s2)
s.compare(pos, len, s2)
s.compare(pos1, len1, s2, pos2, len2)
s.compare(pos, len, "....")
s.compare(pos1, len2, "....", pos2, len2)
size()銆乴ength()錛?br>榪斿洖瀛楃鏁伴噺錛屼袱鑰呯瓑鏁堛?br>empty()錛?br>鍒ゆ柇瀛楃涓叉槸鍚︿負絀恒?br>max_size()錛?br>榪斿洖瀛楃鐨勫彲鑳芥渶澶т釜鏁幫紝寰堝彲鑳藉拰鏈哄櫒鏈韓鐨勯檺鍒舵垨鑰呭瓧絎︿覆鎵鍦ㄤ綅緗繛緇唴瀛樼殑澶у皬鏈夊叧緋匯?br>capacity()錛?br>榪斿洖閲嶆柊鍒嗛厤鍓嶇殑瀛楃瀹歸噺銆?br>reserve()錛?br>閲嶇疆瀛楃瀹歸噺銆?br>
[]銆乤t()錛?br>瀛樺彇鍗曚竴瀛楃錛屼笉鍚岀偣鍦ㄤ簬at()浼氭鏌ョ儲寮曟槸鍚︽湁鏁堬紝鍗蟲槸鍚﹁秴鍑?锝瀞.length()-1鐨勮寖鍥達紝濡傛灉瓚呭嚭浼氭姏鍑簅ut_of_range鐨勫紓甯搞?br>
>>銆乬etline()錛?br>浠巗tream涓鍙栨煇鍊鹼紝鍏朵腑getline()鏄鍙栦竴琛岋紝鐩村埌閬囧埌鍒嗚絎︽垨鑰呮枃浠剁粨灝劇銆?br><<錛?br>灝嗘煇鍊煎啓鍏tream銆?br>
copy()錛?br>灝嗘煇string鍐欏叆涓涓棦鏈夌殑c_string涓紝渚嬪s.copy(chars, s.size())錛屽緱鍒扮殑瀛楃涓?span style="COLOR: red">涓嶄互"\0"緇撳熬錛岄渶瑕佹敞鎰忚繖鐐廣?br>c_str()錛?br>鍑芥暟鍘熷瀷鏄痗onst char* c_str() const{}錛屼緥濡俿.c_str()灝嗚繑鍥炰竴涓猚onst char*綾誨瀷錛屼笖浠?\0"緇撳熬銆?br>data()錛?br>鍑芥暟鍘熷瀷鏄痗onst char* data() const{}錛屼緥濡俿.data()榪斿洖涓涓猚onst char*綾誨瀷錛屼笌c_str()涓嶅悓鐨勬槸瀹冭繑鍥炵殑瀛楃涓蹭笉浠?\0"緇撳熬銆?br>
substr()錛?br>榪斿洖鏌愪釜瀛愬瓧絎︿覆銆?br>s.substr() //榪斿洖s鐨勫叏閮ㄥ唴瀹?br>s.substr(pos) //浠巔os涓嬫爣寮濮嬬殑鎵鏈夊瓧絎?br>s.substr(pos, len) //浠庣儲寮昿os寮濮嬬殑len涓瓧絎︺?br>
begin()銆乪nd()錛?br>鎻愪緵綾諱技STL鐨勮凱浠e櫒鏀寔銆?br>rbegin()銆乺end()錛?br>閫嗗悜榪唬鍣ㄣ?br>get_allocator()錛氳繑鍥為厤緗櫒銆?br>
鏌ユ壘鍑芥暟錛?br>find
rfind
find_first_of
find_last_of
find_first_not_of
find_last_not_of
鍙傛暟1鏄鎼滃鐨勫璞★紝鍙傛暟2鎸囧嚭鎼滃璧風偣绱㈠紩錛堝彲鏃狅級錛屽弬鏁?鎸囧嚭鎼滃鐨勫瓧絎︿釜鏁幫紙鍙棤錛夛紝榪斿洖鍊兼槸绱㈠紩鍊鹼紝綾誨瀷鏄痵tring::size_type錛屽鏋滄病鏈夋壘鍒扮洰鏍囷紝榪斿洖string::npos銆傛敞鎰忥細string::npos鐨勭被鍨嬫槸string::size_type錛屽茍涓嶆槸int鑰屾槸unsigned int銆?br>鍙傛暟濡備笅錛?br>c, pos //浠巔os涓嬫爣寮濮嬫煡鎵懼瓧絎錛宲os鍙粯璁や負0
s2, pos //浠巔os寮濮嬫煡鎵緎tring綾誨瀷s2錛宲os鍙粯璁や負0
cp, pos //浠巔os寮濮嬫煡鎵懼瓧絎︿覆cp錛宲os鍙粯璁や負0
cp, pos, len //鏌ユ壘cp鍓峮涓瓧絎︼紝pos鍜宭en涓嶅彲榛樿
class A 

{
};
//緇撴灉錛歴izeof(A)=1
//鍘熷洜錛氱┖綾誨茍涓嶆槸浠涔堥兘娌℃湁錛岃屾槸闅愬惈鎻掑叆浜嗕竴涓瓧鑺備綔涓哄湴鍧鍋忕Щ閲忋傚鏋滅┖綾婚暱搴︿負0錛岄偅鍒涘緩n涓被瀹炰緥鏃朵細鍑虹幇榪欎簺瀹炰緥閮藉湪鍚屼竴浣嶇疆鐨勯棶棰樸?/span>
class A 

{
int num;
virtual void func() = 0;
};
//緇撴灉錛歴izeof(A)=8
//鍘熷洜錛氬鏋滅被涓湁綰櫄鍑芥暟鎴栬呰櫄鍑芥暟錛岄偅涔堟湁涓涓寚鍚戣櫄鍑芥暟鐨勬寚閽堬紝璇ユ寚閽堝ぇ灝忎負4涓瓧鑺傘?/span>
class A 

{
};
class B : public A

{
//娣誨姞
};
//緇撴灉錛?#8220;娣誨姞”澶勬病鏈変換浣曡鍙ワ紝sizeof(B)=1錛涙坊鍔爄nt a錛宻izeof(B)=4銆?br>
//鍘熷洜錛氬拰闈炵戶鎵跨殑鎯呭喌涓鏍楓?/span>
class A 

{
};
class B

{
};
class C : public B, public A

{
//娣誨姞
};
//緇撴灉錛?#8220;娣誨姞”澶勪腑涓嶅姞浠諱綍璇彞錛宻izeof(C)=1錛涙坊鍔爄nt a錛宻izeof(C)=18錛涙坊鍔燾har a錛宻izeof(C)=12錛涙坊鍔爏hort錛宻izeof(C)=14銆?br>
//鍘熷洜錛氫笉娣誨姞浠諱綍璇彞鐨勯偅1涓瓧鑺傛槸鍋忕Щ閲忥紝鑰屾坊鍔犲叾浠栧彉閲忓悗鍥犱負瀵歸綈鐨勫師鍥狅紙鍜岀粨鏋勪綋鐩稿悓錛夛紝鎵浠ュ嚭鐜拌繖縐嶇粨鏋溿?/span>
class A 

{
int b;
static int a;
};
//緇撴灉錛歴izeof(A)=4
//鍘熷洜錛氱被鐨勯潤鎬佹暟鎹垚鍛樻斁鍦ㄥ叏灞闈欐佸瓨鍌ㄥ尯涓紝涓嶅獎鍝嶇被鐨勫ぇ灝忋傝岀被鐨勯潪闈欐佹暟鎹垚鍛樺彧鏈夎瀹炰緥鍖栫殑鏃跺欙紝浠栦滑鎵嶅瓨鍦ㄣ?/span>
class A 

{
A()
{};
~A()
{};
int Func()
{};
int a;
};
//緇撴灉錛歴izeof(A)=4
//鍘熷洜錛氱被鐨勫ぇ灝忎笌瀹冨綋涓殑鏋勯犲嚱鏁幫紝鏋愭瀯鍑芥暟錛屼互鍙婂叾浠栫殑鎴愬憳鍑芥暟鏃犲叧錛堢函铏氬嚱鏁伴櫎澶栵級錛屽彧涓庡畠褰撲腑鐨勬垚鍛樻暟鎹湁鍏熾?/span>
#include <math.h>
int abs(int x);
float fabs(float x);
float sin(float x);
float asin(float x); //x in [-1.0, 1.0]
float cos(float x);
float acos(float x); //x in [-1.0, 1.0]
float tan(float x);
float atan(float x);
float atan2(float x, float y); //姹倄/y鐨勫弽姝e垏鍊?/span>
float sinh(float x); //姹倄鐨勫弻鏇叉寮﹀鹼紝(e^x – e^(-x)) / 2
float cosh(float x); //姹倄鐨勫弻鏇蹭綑寮﹀鹼紝(e^x + e^(-x) / 2)
float tanh(float x); //姹倄鐨勫弻鏇叉鍒囧鹼紝(e^x – e^(-x)) / (e^x + e^(-x))
float ceil(float x);
float floor(float x);
float exp(float x);
float fmod(float x, float y); //姹倄/y鐨勪綑鏁幫紝x – x / y
float frexp(float x, int *exp); //鎶妜鍒嗚В鎴愬熬鏁板拰2鐨勬寚鏁幫紝榪斿洖鏁版槸灝炬暟錛宔xp鏄寚鏁?/span>
float ldexp(float x, int exp); //杞澆嫻偣鏁幫紝榪斿洖x*2^exp鐨勫?/span>
float modf(float x, float *i); //灝唜鍒嗚В鎴愭暣鏁板拰灝忔暟錛岃繑鍥炲兼槸灝忔暟閮ㄥ垎錛宨鏄暣鏁伴儴鍒?/span>
float hypot(float x, float y); //鏍規(guī)嵁鍕捐偂瀹氱悊榪斿洖鏂滆竟
float log(float x); //x > 0
float log10(float x); //x > 0
float pow(float x, float y); //x > 0
float sqrt(float x); //x > 0
瀛楃鍑芥暟錛?/strong>
#include <ctype.h>
int isalnum(int c); //鍒ゆ柇鏄惁涓?-9銆乤-z銆丄-z涓殑瀛楃
int isalpha(int c);
int isaldigit(int c);
int iscntrl(int c); //鍒ゆ柇c鏄惁涓烘帶鍒跺瓧絎︼紝0X00-0X1F涔嬮棿鎴?X7F錛圖EL錛?/span>
int islower(int c);
int isupper(int c);
int isascii(int c); //鍒ゆ柇鏄惁涓篈SCII鐮侊紝鎸?X00-0X7F涔嬮棿鐨勫瓧絎?/span>
int isgraph(int c); //c鏄惁涓洪櫎絀烘牸涔嬪鐨勫彲鎵撳嵃瀛楃錛屾寚0X21-0X7E
int isprint(int c); //c鏄惁涓哄彲鎵撳嵃瀛楃錛屽寘鍚┖鏍鹼紝鎸?x20-0x7E
int ispunct(int c); //c鏄惁涓烘爣鐐圭鍙鳳紝鎸囬潪瀛楃鏁板瓧錛岄潪絀烘牸鐨勫彲鎵撳嵃瀛楃
int isspace(int c); //絀虹櫧絎︽寚絀烘牸銆佸埗琛ㄧ銆佹崲欏電銆佸洖杞︾銆佹崲琛岀
int isxdigit(int c); //鏄惁16榪涘埗鏁板瓧錛屾寚0-9銆丄-F銆乤-f涔嬮棿鐨勫瓧絎?/span>
int toascii(int c); //灝哻杞崲鎴恆scii鐮侊紝鍗抽珮浣嶆竻闆訛紝浠呬繚鐣欎綆7浣?/span>
int tolower(int c);
int toupper(int c);
鍔ㄦ佸唴瀛樺垎閰嶏細
#include <stdlib.h>
void *malloc(unsigned int num_bytes);
void *realloc(void *mem_address, unsigned int newsize);
void *alloc(int num_elems, int elem_size);
瀛楃涓插嚱鏁幫細
#include <string.h>
void *memchr(void *buf, char ch, unsigned count);
//鍦╞uf鎵鎸囧唴瀛樺墠count涓瓧鑺傛煡鎵懼瓧絎h錛岃繑鍥炴寚鍚慶h鐨勬寚閽堟垨NULL
int memcmp(void *buf1, void *buf2, unsigned int count);
//姣旇緝buf1鍜宐uf2鐨勫墠count涓瓧鑺傦紝< = > 鍒嗗埆榪斿洖 <0 =0 >0
int memicmp(void *buf1, void *buf2, unsigned int count);
//姣旇緝buf1鍜宐uf2鐨勫墠count涓瓧鑺傦紝浣嗕笉鍖哄垎瀛楁瘝澶у皬鍐?/span>
void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);
//浠巗rc涓鍒朵笉澶氫簬count涓瓧鑺傚埌dest錛岄亣鍒板瓧絎h鍒欏仠姝㈠鍒躲傝繑鍥炴寚鍚慶h鍚庣殑絎竴涓瓧絎︾殑鎸囬拡錛屾病鏈夐亣鍒癱h鍒欒繑鍥濶ULL錛屾敞鎰廲h涔熻澶嶅埗
void *memcpy(void *dest, void *src, unsigned int count);
//浠巗rc涓鍒朵笉澶氫簬count涓瓧鑺傚埌dest錛岃繑鍥炴寚鍚慸est鐨勬寚閽堬紝娉ㄦ剰dest鍜宻rc涓嶈兘閲嶅彔
void *memmove(void *dest, const void *src, unsigned int count);
//浠巗rc涓鍒朵笉澶氫簬count涓瓧鑺傚埌dest錛岃繑鍥炴寚鍚慸est鐨勬寚閽堬紝鍏朵腑dest鍜宻rc鎵鎸囧唴瀛樺尯鍩熷彲浠ラ噸鍙狅紝浣嗘槸src鍐呭浼氳鏇存敼
void *memeset(void *buffer, int c, int count);
//灝哹uffer鎵鎸囧尯鍩熷墠count涓瓧鑺傝緗垚c瀛楃錛岃繑鍥瀊uffer鎸囬拡
char *strcpy(char *dest, char *src);
// src鎵鏈夊瓧絎︿覆澶嶅埗鍒癲est涓紝涓よ呭尯鍩熶笉鍙噸鍙狅紝涓攄est蹇呴』瑕佹湁瓚沖絀洪棿錛岃繑鍥瀌est鎸囬拡
char *strncpy(char *dest, char *src, int n);
// src鍓峮涓瓧絎﹀鍒跺埌dest涓紝涓よ呭尯鍩熶笉鍙噸鍙狅紝涓攄est蹇呴』瑕佹湁瓚沖絀洪棿錛岃繑鍥瀌est鎸囬拡銆傚鏋渟rc鍓峮涓瓧絎︿笉鍚?\0"錛屽垯dest涓嶄互"\0"緇撴潫錛涘鏋渟rc闀垮害灝忎簬n錛屽垯鐢?\0"濉厖dest鐩村埌n涓瓧鑺傚鍒跺畬姣?/span>
char *strdup(char *s);
//鍑芥暟鍐卪alloc()鍒嗛厤絀洪棿錛岃繑鍥炴寚鍚戣澶嶅埗鐨勫瓧絎︿覆鐨勬寚閽堬紝闇瑕佸湪鍑芥暟涓漢宸ree鎺夊垎閰嶇殑絀洪棿
char *strcat(char *dest, char *src);
//鑱旀帴dest鍜宻rc錛宒est鏀瑰彉錛屼袱鑰呭尯鍩熶笉鍙噸鍙狅紝涓攄est蹇呴』瑕佹湁瓚沖絀洪棿錛岃繑鍥瀌est鎸囬拡
char *strncat(char *dest, char *src, int c);
//鑱旀帴dest鍜宻rc鍓峮涓瓧絎︼紝涓よ呭尯鍩熶笉鍙噸鍙狅紝涓攄est蹇呴』瑕佹湁瓚沖絀洪棿錛岃繑鍥瀌est鎸囬拡
int strcmp(char *s1, char *s2);
//姣旇緝s1鍜宻2錛?lt; = > 鍒嗗埆涓?nbsp;<0 =0 >0
int strncmp(char *s1, char *s2, int n);
//姣旇緝s1鍜宻2鍓峮涓瓧絎︼紝鍚屼笂
int stricmp(char *s1, char *s2);
//姣旇緝s1鍜宻2錛屼笉鍖哄垎瀛楃澶у皬鍐?/span>
int strnicmp(char *s1, char *s2, int n);
//姣旇緝s1鍜宻2鍓峮涓瓧絎︼紝涓嶅尯鍒嗗瓧絎﹀ぇ灝忓啓
//鏌ユ壘s涓璫鐨勯嬈″嚭鐜頒綅緗紝榪斿洖c浣嶇疆鎸囬拡鎴栬匩ULL
int strcspn(char *s1, char *s2);
//鍦╯1涓悳绱2涓嚭鐜扮殑瀛楃錛岃繑鍥炵涓涓嚭鐜板湪s1涓殑涓嬫爣鍊鹼紝浜﹀嵆鍦╯1涓嚭鐜拌宻2涓病鏈夊嚭鐜扮殑瀛楃涓查暱搴?/span>
char *strpbrk(char *s1, char *s2);
//鍦╯1涓悳绱2涓嚭鐜扮殑瀛楃錛岃繑鍥炵涓涓嚭鐜板湪s1涓殑瀛楃鎸囬拡鎴栬匩ULL
//浠巋aystack涓鎵緉eedle絎竴嬈″嚭鐜扮殑浣嶇疆錛岃繑鍥炵涓嬈″嚭鐜扮殑浣嶇疆鎸囬拡鎴栬匩ULL
int strlen(char *s);
//榪斿洖s鐨勯暱搴︼紝涓嶅寘鎷粨鏉熺NULL
char *strlwr(char *s);
//灝唖杞崲涓哄皬鍐欏瓧姣嶅艦寮忥紝榪斿洖鎸囧悜s鐨勬寚閽?/span>
char *strupr(char *s);
//灝唖杞崲涓哄ぇ鍐欏瓧姣嶅艦寮忥紝榪斿洖鎸囧悜s鐨勬寚閽?/span>
char *strrev(char *s);
//灝唖鐨勬墍鏈夊瓧絎﹂『搴忛鍊掕繃鏉ワ紝涓嶅寘鎷?#8220;\0”錛岃繑鍥瀞鎸囬拡
char *strset(char *s, char c);
//灝唖鐨勫瓧絎﹁緗垚瀛楃c錛?\0"涓嶅彉錛夛紝榪斿洖s鐨勬寚閽?/span>
鍑芥暟鍘熷瀷錛歷oid *memcpy(void *dest, const void *source, size_t count);
榪斿洖鍊艱鏄庯細榪斿洖鎸囧悜dest鐨剉oid *鎸囬拡
鍑芥暟璇存槑錛歮emcpy鍔熻兘鍜宮emmove鐩稿悓錛屼絾鏄痬emcpy涓璬est鍜宻ource涓殑鍖哄煙涓嶈兘閲嶅彔錛屽惁鍒欎細鍑虹幇鏈煡緇撴灉銆?/p>
鍘熷瀷錛歝har *strstr(char *haystack, char *needle);
鐢ㄦ硶錛?include <string.h>
鍔熻兘錛氫粠瀛楃涓瞙aystack涓鎵緉eedle絎竴嬈″嚭鐜扮殑浣嶇疆錛堜笉姣旇緝緇撴潫絎ULL)銆?br>璇存槑錛氳繑鍥炴寚鍚戠涓嬈″嚭鐜皀eedle浣嶇疆鐨勬寚閽堬紝濡傛灉娌℃壘鍒板垯榪斿洖NULL銆?/p>
鍑芥暟鍘熷瀷錛歝har * strcpy(char * strDest,const char * strSrc);
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||(strSrc==NULL))
throw "Invalid argument(s)";
char * strDestCopy=strDest;
while ((*strDest++=*strSrc++)!='\0')
;
return strDestCopy;
}
memcpy鍜宮emmove 鐨勫尯鍒細
鍑芥暟memcpy()浠巗ource鎸囧悜鐨勫尯鍩熷悜dest鎸囧悜鐨勫尯鍩熷鍒禼ount涓瓧絎︼紝濡傛灉涓ゆ暟緇勯噸鍙狅紝涓嶅畾涔夎鍑芥暟鐨勮涓恒傝宮emmove()濡傛灉涓ゅ嚱鏁伴噸鍙狅紝璧嬪間粛姝g‘榪涜銆俶emcpy鍑芥暟鍋囪瑕佸鍒剁殑鍐呭瓨鍖哄煙涓嶅瓨鍦ㄩ噸鍙狅紝濡傛灉浣犺兘紜繚浣犺繘琛屽鍒舵搷浣滅殑鐨勫唴瀛樺尯鍩熸病鏈変換浣曢噸鍙狅紝鍙互鐩存帴鐢╩emcpy錛涘鏋滀綘涓嶈兘淇濊瘉鏄惁鏈夐噸鍙狅紝涓轟簡紜繚澶嶅埗鐨勬紜э紝浣犲繀欏葷敤memmove銆俶emcpy鐨勬晥鐜囦細姣攎emmove楂樹竴浜涳紝濡傛灉榪樹笉鏄庣櫧鐨勮瘽鍙互鐪嬩竴浜涗袱鑰呯殑瀹炵幇錛?/p>
void *memmove(void *dest, const void *source, size_t count)
{
assert((NULL != dest) && (NULL != source));
char *tmp, *s;
if (dest <= src)
{
tmp = (char *) dest;
s = (char *) src;
while (count--)
*tmp++ = *s++;
}
Else
{
tmp = (char *) dest + count;
s = (char *) src + count;
while (count--)
*--tmp = *--s;
}
return dest;
}
12.++i涓巌++
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) +=123;
Print(“%d %d”, *ptr, *(++ptr));
涓瀹氳娉ㄦ剰姹傚奸『搴忥紝*(ptr++) +=123涓厛鍋氬姞娉?+123錛岀劧鍚巔tr++錛屾鏃舵寚閽堟寚鍚?錛涘浜嶱rint(“%d %d”, *ptr, *(++ptr))錛屼粠鍚庡線鍓嶆墽琛岋紝鍏堝仛++ptr錛屾寚鍚?錛岀劧鍚庤緭鍑?鍜?銆?br>娉細涓鑸姝㈠湪璇彞涓繖鏍蜂嬌鐢?+榪愮畻絎︼紝鍥犱負浼氫緷璧栦笉鍚岀殑緙栬瘧鍣ㄨ屾湁鎵涓嶅悓銆備緥濡傦紝TC涓璸rintf璇彞浠庡彸鍚戝乏鎵ц錛孷C6.0涓悓鏍蜂粠鍙沖悜宸︽墽琛岋紝浣嗘槸鍦ㄩ亣瑙佸悗澧炶繍綆楃a++鎴栬卆--鏃舵槸鍦ㄦ暣涓猵rintf璇彞鍚庢墠鎵ц銆?br>int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
榪欎釜鍑芥暟鐨勮緭鍑虹粨鏋滃湪VC閲屾槸8 7 8 8錛屽湪TC閲屾槸8 7 7 8銆?br>int i=3, j;
j = (i++)*(i++);
榪欎釜琛ㄨ揪寮忚緭鍑簀鏄?錛宨鏈鍚庢槸5錛屽洜涓轟袱涓猧++鏄湪鏁翠釜榪愮畻寮忎箣鍚庢墠榪涜鐨勩?br>int i=3, j;
j = (++i)*(++i);
榪欎釜琛ㄨ揪寮忚緭鍑簀鏄?5錛宨鏈鍚庢槸5錛屽洜涓?+i鐩稿綋浜巌鍔?鍚庡皢i鏀懼叆寮忓瓙涓紝鎵浠=i*i錛屼笖i涓?銆?br>int i=3, j;
printf(“%d %d”, ++i, ++i);
榪欎釜琛ㄨ揪寮忚緭鍑?, 4錛屼負浠涔堜袱涓間笉涓鏍峰憿錛熷洜涓簆rintf鏄嚱鏁幫紝灝?+i浼犵粰printf鍚庯紝鐩稿綋浜庢墦鍗扮殑鏄艦鍙傦紝鑰屼袱涓?+i浼犲叆鐨勫艦鍙備笉鍚屻?br>娉細鐗瑰埆瑕佹敞鎰忓畯銆佽繍綆椾笌鍑芥暟浣跨敤i++鍜?+i鐨勬儏鍐碉紝瀹規(guī)槗璁╀漢鍥版儜……
13.
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
return 0;
}
鍦–璇█涓紝鍑′笉鍔犺繑鍥炲肩被鍨嬮檺瀹氱殑鍑芥暟錛屽氨浼氳緙栬瘧鍣ㄤ綔涓鴻繑鍥炴暣鍨嬪煎鐞嗭紱C++璇█鏈夊緢涓ユ牸鐨勭被鍨嬪畨鍏ㄦ鏌ワ紝涓嶅厑璁鎬笂榪版儏鍐碉紙鎸囧嚱鏁頒笉鍔犵被鍨嬪0鏄庯級鍙戠敓銆傚彲鏄紪璇戝櫒騫朵笉涓瀹氳繖涔堣瀹氾紝璀鍦╒isual C++6.0涓笂榪癮dd鍑芥暟鐨勭紪璇戞棤閿欎篃鏃犺鍛婁笖榪愯姝g‘銆?br>#include "stdio.h"
int fun()
{
return 1;
}
main()
{
printf("%d",fun(2));
getchar();
}
鍦–璇█涓紝鍙互緇欐棤鍙傛暟鐨勫嚱鏁頒紶閫佷換鎰忕被鍨嬬殑鍙傛暟錛屼絾鏄湪C++緙栬瘧鍣ㄤ腑緙栬瘧鍚屾牱鐨勪唬鐮佸垯浼氬嚭閿欍傛墍浠ワ紝鏃犺鍦–榪樻槸C++涓紝鑻ュ嚱鏁頒笉鎺ュ彈浠諱綍鍙傛暟錛屼竴瀹氳鎸囨槑鍙傛暟涓簐oid銆?br>鎸夌収ANSI(American National Standards Institute)鏍囧噯錛屼笉鑳藉void鎸囬拡榪涜綆楁硶鎿嶄綔錛屽嵆涓嬪垪鎿嶄綔閮芥槸涓嶅悎娉曠殑錛?br>void * pvoid;
pvoid++; //ANSI錛氶敊璇?br>pvoid += 1; //ANSI錛氶敊璇?br>ANSI鏍囧噯涔嬫墍浠ヨ繖鏍瘋瀹氾紝鏄洜涓哄畠鍧氭寔錛氳繘琛岀畻娉曟搷浣滅殑鎸囬拡蹇呴』鏄‘瀹氱煡閬撳叾鎸囧悜鏁版嵁綾誨瀷澶у皬鐨勩?br>渚嬪錛?br>int *pint;
pint++; //ANSI錛氭紜?br>pint++鐨勭粨鏋滄槸浣垮叾澧炲ぇsizeof(int)銆?br>浣嗘槸澶у悕榧庨紟鐨凣NU(GNU's Not Unix鐨勭緝鍐?鍒欎笉榪欎箞璁ゅ畾錛屽畠鎸囧畾void *鐨勭畻娉曟搷浣滀笌char *涓鑷淬?br>鍥犳涓嬪垪璇彞鍦℅NU緙栬瘧鍣ㄤ腑鐨嗘紜細
pvoid++; //GNU錛氭紜?br>pvoid += 1; //GNU錛氭紜?br>pvoid++鐨勬墽琛岀粨鏋滄槸鍏跺澶т簡1銆?br>鍦ㄥ疄闄呯殑紼嬪簭璁捐涓紝涓鴻繋鍚圓NSI鏍囧噯錛屽茍鎻愰珮紼嬪簭鐨勫彲縐繪鎬э紝鎴戜滑鍙互榪欐牱緙栧啓瀹炵幇鍚屾牱鍔熻兘鐨勪唬鐮侊細
void * pvoid;
char* tmp = (char*)pvoid;
tmp++; //ANSI錛氭紜紱GNU錛氭紜?br>tmp += 1; //ANSI錛氭紜紱GNU錛氭紜?br>GNU鍜孉NSI榪樻湁涓浜涘尯鍒紝鎬諱綋鑰岃█錛孏NU杈傾NSI鏇?#8220;寮鏀?#8221;錛屾彁渚涗簡瀵規(guī)洿澶氳娉曠殑鏀寔銆備絾鏄垜浠湪鐪熷疄璁捐鏃訛紝榪樻槸搴旇灝藉彲鑳藉湴榪庡悎ANSI鏍囧噯銆?br>
#include "stdafx.h"
#include "DLLSample.h"
#pragma comment(lib, "DLLSample.lib") //浣犱篃鍙互鍦ㄩ」鐩睘鎬т腑璁劇疆搴撶殑閾炬帴
int main()

{
TestDLL(123); //dll涓殑鍑芥暟錛屽湪DllSample.h涓0鏄?/span>
return(1);
}
錛?錛夋樉寮忛摼鎺?br>闇瑕佸嚱鏁版寚閽堝拰WIN32 API鍑芥暟LoadLibrary銆丟etProcAddress瑁呰澆錛屼嬌鐢ㄨ繖縐嶈澆鍏ユ柟娉曪紝涓嶉渶瑕?lib鏂囦歡鍜?h澶存枃浠訛紝鍙渶瑕?dll鏂囦歡鍗沖彲錛堝皢.dll鏂囦歡緗叆宸ョ▼鐩綍涓級銆?/p>
#include <iostream>
#include <windows.h> //浣跨敤鍑芥暟鍜屾煇浜涚壒孌婂彉閲?/span>
typedef void (*DLLFunc)(int);
int main()

{
DLLFunc dllFunc;
HINSTANCE hInstLibrary = LoadLibrary("DLLSample.dll");
if (hInstLibrary == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "TestDLL");
if (dllFunc == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc(123);
std::cin.get();
FreeLibrary(hInstLibrary);
return(1);
}

LoadLibrary鍑芥暟鍒╃敤涓涓悕縐頒綔涓哄弬鏁幫紝鑾峰緱DLL鐨勫疄渚嬶紙HINSTANCE綾誨瀷鏄疄渚嬬殑鍙ユ焺錛夛紝閫氬父璋冪敤璇ュ嚱鏁板悗闇瑕佹煡鐪嬩竴涓嬪嚱鏁拌繑鍥炴槸鍚︽垚鍔燂紝濡傛灉涓嶆垚鍔熷垯榪斿洖NULL錛堝彞鏌勬棤鏁堬級錛屾鏃惰皟鐢ㄥ嚱鏁癋reeLibrary閲婃斁DLL鑾峰緱鐨勫唴瀛樸?br>GetProcAddress鍑芥暟鍒╃敤DLL鐨勫彞鏌勫拰鍑芥暟鐨勫悕縐頒綔涓哄弬鏁幫紝榪斿洖鐩稿簲鐨勫嚱鏁版寚閽堬紝鍚屾椂蹇呴』浣跨敤寮鴻漿錛涘垽鏂嚱鏁版寚閽堟槸鍚︿負NULL錛屽鏋滄槸鍒欒皟鐢ㄥ嚱鏁癋reeLibrary閲婃斁DLL鑾峰緱鐨勫唴瀛樸傛鍚庯紝鍙互浣跨敤鍑芥暟鎸囬拡鏉ヨ皟鐢ㄥ疄闄呯殑鍑芥暟銆?br>鏈鍚庤璁板緱浣跨敤FreeLibrary鍑芥暟閲婃斁鍐呭瓨銆?br>
娉ㄦ剰錛氬簲鐢ㄧ▼搴忓浣曟壘鍒癉LL鏂囦歡錛?/span>
浣跨敤LoadLibrary鏄懼紡閾炬帴錛岄偅涔堝湪鍑芥暟鐨勫弬鏁頒腑鍙互鎸囧畾DLL鏂囦歡鐨勫畬鏁磋礬寰勶紱濡傛灉涓嶆寚瀹氳礬寰勶紝鎴栬呰繘琛岄殣寮忛摼鎺ワ紝Windows灝嗛伒寰笅闈㈢殑鎼滅儲欏哄簭鏉ュ畾浣岲LL錛?br>錛?錛夊寘鍚獷XE鏂囦歡鐨勭洰褰?br>錛?錛夊伐紼嬬洰褰?br>錛?錛塛indows緋葷粺鐩綍
錛?錛塛indows鐩綍
錛?錛夊垪鍦≒ath鐜鍙橀噺涓殑涓緋誨垪鐩綍
int A(char *p); //鍥炶皟鍑芥暟
typedef int(*CallBack)(char *p); //澹版槑CallBack綾誨瀷鐨勫嚱鏁版寚閽?/span>
CallBack myCallBack; //瀹氫箟鍑芥暟鎸囬拡鍙橀噺
myCallBack = A; //璧嬪鹼紝寰楀埌鍑芥暟A鐨勫湴鍧
B(A, 5); //璋冪敤B鍑芥暟
void B(CallBack lpCall, int num)

{
//B鑷繁鐨勮鍙?/span>
lpCall(“Hello”);
//B鑷繁鐨勮鍙?/span>
}
class CallBack

{
public:
int operator()(int num) //閲嶈澆()鎿嶄綔絎?/span>
{
//…………………………..
}
}
void B(CallBack call, int num) //瀹氫箟B鍑芥暟

{
//B鑷繁鐨勮鍙?/span>
call(num);
//B鑷繁鐨勮鍙?/span>
}
B(CallBack(), 5); //璋冪敤B鍑芥暟 return a;
}
涓鑸湪浣跨敤榪斿洖鍊煎紩鐢ㄦ椂錛屽父榪斿洖鍏ㄥ眬鍙橀噺絳夋棤娉曟瀽鏋勭殑鍙橀噺錛屼緥濡傦細
int a = 5; //a鏄叏灞鍙橀噺
int result;
result = Function(); //涓嶄細鍑虹幇warning
int &Function()
{
return a;
}
娉ㄦ剰int &Function()鐨勮繑鍥炲煎彲浠ュ厖褰撳乏鍊鹼紝浣嗘槸濡傛灉x鏄嚱鏁扮殑涓存椂鍙橀噺錛屽鍏惰繘琛屽紩鐢ㄦ槸鍗遍櫓鐨勶紱鎵浠ヨ淇濊瘉榪斿洖鍊間笉浼氬洜鍑芥暟榪斿洖鑰岃鏋愭瀯銆傚涓嬶細
int x = 0; //x鏄叏灞鍙橀噺
int &Function()
{
return x;
}
void main()
{
Function() = 100; //姝ゆ椂x絳変簬100
}
錛?錛夋寚閽堝彲浠ユ寚鍚慛ULL錛岃屽紩鐢ㄤ笉鑳藉紩鐢∟ULL銆?br>錛?錛夊紩鐢ㄤ竴鏃﹀0鏄庯紝寮曠敤鐨勫璞′笉鑳芥敼鍙橈紙涓嶈兘寮曠敤鍏朵粬瀵硅薄浜嗭級錛屼絾鏄紩鐢ㄥ璞$殑鍊煎彲浠ユ敼鍙橈紱鎸囬拡鍙互闅忔椂鏀瑰彉鎸囧悜鐨勫璞★紝鍥犳璇存寚閽堟洿鍗遍櫓錛屽紩鐢ㄦ瘮鎸囬拡瀹夊叏銆傚彲浠ヨ錛屽紩鐢ㄦ槸鍦ㄤ笉鐗虹壊鎬ц兘鐨勬儏鍐典笅錛屾洿瀹夊叏鐨勫埄鐢ㄦ寚閽堢壒鎬ф墍浣跨敤鐨勬妧鏈?br>錛?錛夌悊璁轟笂瀛樺湪涓ょ蹇呴』鐢ㄦ寚閽堢殑鎯呭喌錛屽叾浠栨儏鍐典笅寤鴻鐢ㄥ紩鐢ㄨ屼笉鏄寚閽堬細
A.鍙兘瀛樺湪涓嶆寚鍚戜換浣曞璞?NULL)鏃訛紝浣跨敤鎸囬拡銆?br>B.闇瑕佹寚鍚戜笉鍚屽璞℃椂錛屼嬌鐢ㄦ寚閽堛?br>錛?錛夊湪鍑芥暟Function(int* &p)涓紝浣跨敤&鐩殑鏄負浜嗗彲浠ユ敼鍙榩鎸囬拡鏈韓錛屼嬌鍏惰兘鎸囧悜鍏朵粬瀵硅薄錛岃繖縐嶇敤娉曞拰Function(int** p)鏄竴鏍風殑錛屽嵆鎸囧悜鎸囬拡鐨勬寚閽堛?br>
2.const涓庢寚閽?/strong>
錛?錛塩onst int a = 10涓巌nt const a = 10絳変環(huán)錛涘悓鐞哻onst int*涓巌nt const*鏄瓑浠風殑銆?br>錛?錛塩onst int *a鏄寚鍚慶onst瀵硅薄鐨勬寚閽堬紝涓嶅彲閫氳繃鎸囬拡鏀瑰彉瀵硅薄鍊鹼紝鑰宨nt * const a鏄痗onst鎸囬拡錛屾寚閽堝彧鑳芥寚鍚戣瀵硅薄銆?br>錛?錛夋寚閽堟寚鍚慶onst瀵硅薄鐨勬儏鍐?br>const int a = 40;
int *p;
p = &a; //閿欙紝緙栬瘧閿欒錛?br>p = (int*)&a; //緙栬瘧閫氳繃錛屼絾鏄痯鏃犳硶鏀瑰彉a鐨勫?br>const int *p;
p = &a; //ok
3.const涓庡紩鐢?/strong>
闈濩onst寮曠敤鍙兘緇戝畾鍒頒笌璇ュ紩鐢ㄥ悓綾誨瀷鐨勫璞★紱
Const寮曠敤鍒欏彲緇戝畾鍒頒笉鍚屼絾鐩稿叧綾誨瀷鐨勫璞℃垨緇戝畾鍒板彸鍊箋?br>錛?錛塩onst瀵硅薄錛堝寘鎷父閲忋佸父閲?鍙橀噺鐢熸垚鐨勬棤鍚嶄復鏃跺彉閲忥級蹇呴』鐢╟onst寮曠敤鏉ュ紩鐢紝鑰屽弽榪囨潵const寮曠敤鍙互寮曠敤const鍜岄潪const鍙橀噺銆?br>int a = 5;
const int b = 10;
int &ref = a; //ok
int &ref = b; //error
const int &ref = b; //ok錛屽繀欏諱負const寮曠敤
const int &ref = a; //ok
const int &ref = 5; //ok錛屽繀欏諱負const寮曠敤
const int &ref = a + 3; //ok錛屽繀欏諱負const寮曠敤
錛?錛塩onst寮曠敤鍙互鐢ㄤ笉鍚岀被鍨嬬殑瀵硅薄鍒濆鍖栵紝
瀵逛簬涓嶅悓綾誨瀷闂寸殑寮曠敤錛?br>double a = 3.5;
const int &ref = a;
瀹為檯涓婂叾宸ヤ綔嫻佺▼鏄厛瀹氫箟int tmp = (int)a錛岀劧鍚巆onst int &ref = tmp錛屾墍浠ュ繀欏葷敤const寮曠敤錛屽惁鍒欎細瀵艱嚧閿欒銆傚父閲?鍙橀噺鐢熸垚鐨勬棤鍚嶄復鏃跺彉閲忓悓鐞嗐?br>錛?錛塩onst寮曠敤鍙互鎸囧悜闇瑕佷復鏃跺璞$殑瀵硅薄鎴栧?br>const int ival = 1024;
const int* &b = &ival; //error
const int* const &b = &ival; //ok
瑙i噴鏄細
typedef const int * P;
P &b = &ival; //error錛屽洜涓?amp;ival鐨勫間笉鍙敼鍙橈紝鑰宐鏄潪甯擱噺鎸囬拡
P const &b = &ival; //絳変環(huán)浜巆onst P &b = &ival;
澶у鍙互鐪嬪埌錛屽皢浜岀淮鏁扮粍褰撲綔鍙傛暟鐨勬椂鍊欙紝蹇呴』鎸囨槑鎵鏈夌淮鏁板ぇ灝忔垨鑰呯渷鐣ョ涓緇寸殑錛屼絾鏄笉鑳界渷鐣ョ浜岀淮鎴栬呮洿楂樼淮鐨勫ぇ灝忥紝榪欐槸鐢辯紪璇戝櫒鍘熺悊闄愬埗鐨勩傚ぇ瀹跺湪瀛︾紪璇戝師鐞嗚繖涔堣紼嬬殑鏃跺欑煡閬撶紪璇戝櫒鏄繖鏍峰鐞嗘暟緇勭殑錛屽浜庢暟緇勶細
int p[m][n]錛?br>濡傛灉瑕佸彇p[i][j]鐨勫?i>=0 && i<m && 0<=j && j < n)錛岀紪璇戝櫒鏄繖鏍峰鍧鐨勶紝瀹冪殑鍦板潃涓猴細
p + i*n + j;
浠庝互涓婂彲浠ョ湅鍑猴紝濡傛灉鎴戜滑鐪佺暐浜嗙浜岀淮鎴栬呮洿楂樼淮鐨勫ぇ灝忥紝緙栬瘧鍣ㄥ皢涓嶇煡閬撳浣曟紜殑瀵誨潃銆備絾鏄垜浠湪緙栧啓紼嬪簭鐨勬椂鍊欏嵈闇瑕佺敤鍒板悇涓淮鏁伴兘涓嶅浐瀹氱殑浜岀淮鏁扮粍浣滀負鍙傛暟錛岃繖灝遍毦鍔炰簡錛岀紪璇戝櫒涓嶈兘璇嗗埆闃匡紝鎬庝箞鍔炲憿錛熶笉瑕佺潃鎬ワ紝緙栬瘧鍣ㄨ櫧鐒朵笉鑳借瘑鍒紝浣嗘槸鎴戜滑瀹屽叏鍙互涓嶆妸瀹冨綋浣滀竴涓簩緇存暟緇勶紝鑰屾槸鎶婂畠褰撲綔涓涓櫘閫氱殑鎸囬拡錛屽啀鍙﹀鍔犱笂涓や釜鍙傛暟鎸囨槑鍚勪釜緇存暟錛岀劧鍚庢垜浠負浜岀淮鏁扮粍鎵嬪伐瀵誨潃錛岃繖鏍峰氨杈懼埌浜嗗皢浜岀淮鏁扮粍浣滀負鍑芥暟鐨勫弬鏁頒紶閫掔殑鐩殑錛屾牴鎹繖涓濇兂錛屾垜浠彲浠ユ妸緇存暟鍥哄畾鐨勫弬鏁板彉涓虹淮鏁伴殢鍗崇殑鍙傛暟錛屼緥濡傦細
void Func(int array[3][10]);
void Func(int array[][10]);
鍙樹負錛?br>void Func(int **array, int m, int n);
鍦ㄨ漿鍙樺悗鐨勫嚱鏁頒腑錛宎rray[i][j]榪欐牱鐨勫紡瀛愭槸涓嶅鐨?涓嶄俊錛屽ぇ瀹跺彲浠ヨ瘯涓涓?錛屽洜涓虹紪璇戝櫒涓嶈兘姝g‘鐨勪負瀹冨鍧錛屾墍浠ユ垜浠渶瑕佹ā浠跨紪璇戝櫒鐨勮涓烘妸array[i][j]榪欐牱鐨勫紡瀛愭墜宸ヨ漿鍙樹負
*((int*)array + n*i + j);
鍦ㄨ皟鐢ㄨ繖鏍風殑鍑芥暟鐨勬椂鍊欙紝闇瑕佹敞鎰忎竴涓嬶紝濡備笅闈㈢殑渚嬪瓙錛?br>int a[3][3] =
{
{1, 1, 1},
{2, 2, 2},
{3, 3, 3}
};
Func(a, 3, 3);
鏍規(guī)嵁涓嶅悓緙栬瘧鍣ㄤ笉鍚岀殑璁劇疆錛屽彲鑳藉嚭鐜皐arning 鎴栬卐rror,鍙互榪涜寮哄埗杞崲濡備笅璋冪敤錛?
Func((int**)a, 3, 3);
琛ュ厖錛?br>瀵逛簬鏈鍚庡埄鐢ㄦ寚閽堜唬鏇夸簩緇存暟緇勭殑鍋氭硶紼嶆樉绱禈錛屽彧闇瑕佷竴灞傜殑鎸囬拡鍗沖彲錛?br>int a[3][3] =
{
{1, 1, 1},
{2, 2, 2},
{3, 3, 3}
};
鍑芥暟浣跨敤濡備笅錛?br>Func((int*)a, 3, 3);
鍑芥暟澹版槑濡備笅錛?br>void Func(int *array, int m, int n);
鍑芥暟涓嬌鐢ㄦ寚閽堝涓嬶細
*(array + n*i + j);
hh.a = 0;
hh.b = -1;
cout << hh.a << endl;
鏈鍚庣殑緇撴灉鏄痟h.a = 255銆傚師鍥犳槸hh.b = -1鏃訛紝浣庝綅瀛楄妭瀛樺偍11111111錛堣ˉ鐮侊級錛岄偅涔堟暣涓?涓瓧鑺傚氨鏄?0000000 00000000 00000000 11111111錛屽嵆255銆傦紙姝f暟鐨勫師鐮併佸弽鐮併佽ˉ鐮侀兘涓鏍鳳紝璐熸暟鐨勫師鐮佷笉鍙橈紝鍙嶇爜鍦ㄥ師鐮佸熀紜涓婂彇鍙嶏紝琛ョ爜鍦ㄥ師鐮佸熀紜涓婂彇鍙嶅姞1錛?/p>
int nn[100],n=100;
int com(const void *a,const void *b)

{
return *(int*)a-*(int*)b;
} 
qsort((void *)nn,n,sizeof(int),com);
娉ㄦ剰錛氱己鐪佹槸鍗囧簭鎺掑簭錛屽彲浠ラ氳繃鍑芥暟com鏀瑰彉鎺掑簭欏哄簭銆?br>
sort()瀹氫箟鍦ㄥ湪澶存枃浠?lt;algorithm>涓?br>template<typename _RandomAccessIterator>
void __insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
sort鍑芥暟鏄爣鍑嗘ā鏉垮簱鐨勫嚱鏁幫紝宸茬煡寮濮嬪拰緇撴潫鐨勫湴鍧鍗沖彲榪涜鎺掑簭錛屽彲浠ョ敤浜庢瘮杈冧換浣曞鍣紙蹇呴』婊¤凍闅忔満榪唬鍣級錛屼換浣曞厓绱狅紝浠諱綍鏉′歡錛屾墽琛岄熷害涓鑸瘮qsort瑕佸揩銆傚叿浣撲簨渚嬪涓嬶細
char ch[20]="sdasdacsdasdas";
cout<<ch<<endl;
sort(ch,ch+14);
cout<<ch<<endl;娉ㄦ剰錛氱己鐪佹槸鍗囧簭鎺掑簭銆俿ort涓竴涓敼鍙樻帓搴忛『搴忕殑渚嬪瓙濡備笅錛?/p>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp (const int a, const int b)

{
return a > b;
}
int main()

{
int data[5];
for(int i = 0; i < 5; i++)
cin >> data[i];
sort(data, data + 5, cmp);
return 0;
}銆奣he C++ Programming Language銆?銆奀++紼嬪簭璁捐璇█銆?br>鏈鏂扮増鏈細絎笁鐗堢壒鍒増
綆縐癟C++PL錛屾湁鍏朵粬璇█鐨勪赴瀵岀粡楠岀殑銆傦紙涔熸湁浜虹畝縐頒箣涓?#8220;TCPL”錛屼絾闇涓庡彟涓鏈奣he C Programmer Language銆嬪尯鍒嗗紑鏉ワ級
銆奅ssential C++銆?br>銆夾ccelerated C++銆?br>榪欎袱鏈杽涓浜涳紝閮芥槸涓嶉敊鐨勯夋嫨銆傘夾ccelerated C++銆嬫湰浜烘病鏈夎榪囷紝浠庡悇鏂歸潰鐨勮瘎浠鋒潵鐪嬶紝瀹屽叏鍊煎緱鎺ㄨ崘銆?/p>
浠ヤ笂鍑犳湰涔﹂兘鏈夌浉搴旂殑涓枃鐗堬紝鑰屼笖緲昏瘧鐨勮川閲忛兘涓嶉敊銆備笂闈㈢殑涔︽湭蹇呴兘闇瑕佽涓閬嶏紝浣嗘棤璁哄浣曪紝TC++PL鏄簲璇ラ槄璇葷殑銆?br>
錛堜簩錛夎繘闃禔錛?/strong>
榪欎釜璺嚎渚ч噸浜庤璦鏈韓
銆奅ffective C++銆?br>鏈鏂扮増鏈細絎簩鐗堬紙絎笁鐗堝浗澶栧凡涓婃灦錛屽浗鍐呬竴浜涚綉涓婁功搴椾篃鍦ㄩ璁腑錛?br>綆縐癊C銆侰++紼嬪簭鍛樺繀璇伙紒寰堝鏃跺欙紝鎴戜滑璇碈++鍦g粡涓嶆槸鎸嘥C++PL錛岃屾槸榪欎竴鏈傘奣he Pragmatic Programmer銆嬩竴涔︿腑鍐欏埌錛?#8220;涓鏃︿綘鍙戠幇鑷繁瑕佸弬涓嶤++欏圭洰鐨勫紑鍙戯紝璧跺揩璺戯紙涓嶈璧幫級鍒頒功搴楀幓璐拱Scott Mayer鐨勩奅ffective C++銆嬶紝鍙兘榪樿銆奙ore Effective C++銆?#8221;銆?/p>
銆奀++ Coding Standards: 101 Rules, Guidelines, and Best Practices銆?銆奀++ 緙栫▼瑙勮寖銆?br>涓漢璁や負姝や功搴斾負C++紼嬪簭鍛樺繀澶囩殑妗堝ご涔︺傚嚑涔嶦ffective緋誨垪鍜孍xceptional緋誨垪閮藉湪榪欓噷寰楀埌浜嗘葷粨銆傛渶鏂扮殑妯$増銆佸紓甯哥殑涓氱晫緇忛獙閮藉湪榪欓噷鐨勫埌浜嗕綋鐜般傚彲鑳界殑鍞竴緙洪櫡灝辨槸瀵逛竴涓柊鎵嬭岃█錛屽叧浜?#8220;涓轟粈涔堣繖涔堝仛”鐨勯棶棰橈紝瑙i噴鐨勪笉澶熴?br>鎴戠殑鐪嬫硶鏄細濡傛灉浣犱笉鐞嗚В鍏朵腑鐨勬潯嬈撅紝璁板繂錛屽茍涓旂収鍋氾紱濡傛灉浣犵悊瑙e叾涓殑鏉℃錛屾垜鐚滀綘涓瀹氫細鍚屾剰涔︿腑鐨勮鐐廣傛垜璁や負榪欐湰涔︿腑鐨勫唴瀹硅嚦灝戝湪2009騫翠互鍓嶉兘涓嶄細榪囨椂錛屼漢浠皢騫夸負浼犺瀹冨埗瀹氱殑101鏉℃垝寰嬨?br>榪樹笉鐭ラ亾浠栫殑綆縐幫紝涔熻“101”浼氭垚涓轟竴涓欓夎咃紵
鎻愬埌銆奅ffective C++銆嬶紝閭d箞鍙﹀涓夋湰涔︿竴涓嫻嚭姘撮潰錛?br>銆奙ore Effective C++銆?br>銆奅xceptional C++銆?br>銆奙ore Exceptional C++銆嬨?br>鏂頒功銆奅xceptional C++ Style銆嬩篃鏄煎緱涓鐪嬬殑濂戒功銆?br>涓婅堪鍑犳湰涔︼紝涓鏈篃涓嶅簲璇ユ斁榪囥?br>涓漢寤鴻涓婅堪涔︾睄鎸夐『搴忛槄璇匯傚茍涓旓紝鍦ㄥ皢鏉ュ弽澶嶉槄璇昏繖鍑犳湰涔︺?br>
錛堜笁錛夎繘闃禕錛?/strong>
榪欎釜璺嚎渚ч噸浜庣▼搴忓簱銆?
銆奣he C++ Standard Library銆?銆奀++鏍囧噯紼嬪簭搴撯旇嚜淇暀紼嬩笌鍙傝冩墜鍐屻?br>鍚榪嘢TL鍚楋紵榪欐湰涔︿細鏁欎綘鏈鍩烘湰鐨勶紝涔熸槸鏈閲嶈鐨凷TL鐨勪嬌鐢ㄣ傝繖鏈功錛屽簲璇ユ槸蹇呰鐨勩?/p>
銆奅ffective STL銆?br>浼氫嬌鐢⊿TL榪樹笉澶燂紝榪樺繀欏葷煡閬撲粈涔堟椂鍊欓夋嫨浠涔圫TL緇勪歡錛岃繖鏄疭TL浣跨敤鐨勫繀璇諱功銆?/p>
銆奊eneric Programming and the STL: Using and Extending the C++ Standard Template Library銆?銆婃硾鍨嬬紪紼嬩笌STL銆嬨?br>榪欐湰涔︾悊璁烘ц緝寮猴紝浣嗘槸鐪熺殑寰堜弗璋紝鑰屼笖騫朵笉鏄潪甯擱毦鎳傘傜悊瑙e叾涓浜嶤oncept鐨勮В閲婏紝灝嗘槸闈炲父閲嶈鐨勩?
銆奀++ STL銆?br>榪欎笉鏄榪頒嬌鐢ㄧ▼搴忓簱鐨勶紝鑰屾槸璁茶堪紼嬪簭搴撳疄鐜板師鐞嗙殑銆傝偁鑳冧笉濂界殑錛岄渶瑕佹參鎱㈠惛鏀躲?/p>
榪欎釜璺嚎鐨勪功錛屼粛鐒舵槸寤鴻鎸夐『搴忛槄璇匯?br>榪涢樁A銆佽繘闃禕涓や釜璺嚎搴旇鏄彲浠ュ茍琛岀殑銆?br>
鍏朵粬榪涢樁鍙傝冧功
鎻愬嚭榪欎簺鍙傝冧功錛屽彧鏄伩鍏嶄簤璁紝涔熶負寮闃旇閲庯紝絎旇呭茍涓嶆浘瀹屽叏璇昏繃鎵鏈夌殑銆?/p>
銆奣hinking in C++銆?銆奀++緙栫▼鎬濇兂銆?br>榪欐湰涔﹀強鍏朵腑鏂囩増浼犺█濂藉潖閮芥湁錛屾病鏈夎鐪熺湅榪囷紝涓嶅仛璇勪環(huán)錛屽鏋滅‘鏈夊叴瓚o紝涓嶅Θ灝濊瘯涓涓嬭涔︺?/p>
浠ヤ笅鍑犳湰涔﹀熀鏈笂娑夊強鐨勯兘鏄璦鏈韓錛屽ぇ浣撲笂鍙互鎸夌収浠ヤ笅鐨勯『搴忛槄璇匯?/p>
銆奀++蹇呯煡蹇呬細銆?br>濡傛灉鏃╀竴騫達紝榪欐湰涔﹀皢鏄噸閲忕駭鐨勶紝鐒惰屽畠琚?01鍜屻奅xceptional C++ Style銆嬬洊榪囦竴澶淬?/p>
銆奀++ Gotchas: Avoiding Common Problems in Coding and Design銆?銆奀++紼嬪簭璁捐闄烽槺銆?br>榪欏張鏄竴鏈垜鏈浘璇昏繃錛岃屼笖騫垮彈濂借瘎鐨勪功銆?/p>
銆奡TL 婧愮爜鍓栨瀽銆?br>榪欐湰涔︽垜鍒氬埌鎵嬶紝灝辮浜?鍊?璧幫紝浠ヨ嚦浜庡埌鐜板湪涔熸病鏈夌湅榪囥傜湅榪囪繖鏈功鐨勬湅鍙嬶紝鍙互緇欎竴涓悎閫傜殑璇勪環(huán)銆?
楂樼駭錛?br>銆奣he Design and Evolution of C++銆?銆奀++璇柟鐨勮璁″拰婕斿寲銆?br>綆縐癉&E錛屽唴瀹瑰茍涓嶈壈娣憋紝Bjarne鐨勪功錛屼粎姝わ紝灝卞煎緱涓璇匯?br>鍓嶆鏃墮棿錛屼簰鍔ㄧ綉鏇?鍧椾竴鏈紙浜烘皯甯侊級璐卞崠姝や功錛岀幇鍦ㄥソ鍍忔病浜嗐?/p>
銆奍nside The C++ Object Model銆?銆婃繁搴︽帰绱++瀵硅薄妯″瀷銆?br>C紼嬪簭鍛樿鍚庝竴瀹氫細瑙夊緱C++鍘熸潵騫朵笉紲炵銆?/p>
銆奀++ Template銆?br>鍦ㄩ槄璇籗TL銆丅oost鎴栬匧oki鐨勬簮浠g爜涔嬪墠錛岃浠旂粏闃呰鏈功錛屽畠鍙互鍑忚交涓浜涢槄璇葷殑鐑︽伡銆傝繖鏈功鏄璁篊++妯$増鐨勬潈濞併?
銆奙odern C++ Design Generic Programming and Design Patterns Applied銆?銆奀++璁捐鏂版濈淮鈥斺旀硾鍨嬬紪紼嬩笌璁捐妯″紡涔嬪簲鐢ㄣ?br>綆縐癕CD銆傚湪闃呰MCD涔嬪墠錛屽緩璁厛闃呰涓涓嬨奀++ Template銆嬨?/p>
銆婂璞℃彮縐橈細Java銆丒iffel鍜孋++銆?br>浣犲C++涓嶆弧鍚楋紵榪欐湰涔﹀彲浠ラ儴鍒嗗湴甯綘瀹屾垚鎶辨ㄧ殑鐩爣銆備篃璁稿畠榪樺彲浠ヨ浣犱笉榪蜂俊C++銆?/p>
鏈鍚庯紝涓浠紺++鏍囧噯鏂囨。涔熸槸搴旇鍔犱互鍜鍤肩殑銆?
榪樻湁涓浜涗功綾嶏紝騫朵笉鑳界畝鍗曠殑褰掍簬C++錛屼篃闅句互鍦ㄧ函綺圭殑涔︽湰瀛︿範涓姞浠ユ帉鎻°傘奃esign Patterns銆?銆婅璁℃ā寮忋嬩竴涔﹀氨褰掍簬姝ょ被銆?/p>
鎵鏈変笂榪扮殑涔︾睄錛岃涔堣皥璁篊++璇█鏈韓錛岃涔堣皥璁篠TL鐨勶紝瑕佷箞鍏艱屾湁涔嬶紙褰撶劧涓ユ牸璁睸TL涔熸槸C++璇█闈炲父閲嶈鐨勪竴閮ㄥ垎錛夈傚伓灝旓紝鏌愪簺涔︿腑鏉$洰涔熶細娑夊強瀹為檯宸ョ▼銆傝繖浜涗功騫朵笉鏄疌++杞歡寮鍙戠殑鍏ㄩ儴錛屼絾鏄粬浠緢閲嶈銆傞槄璇昏繖浜涗功錛屾湭蹇呴渶瑕佸寲璐瑰お澶氱殑綺懼姏錛屾湁鏃跺欐槸浼氬洶闅撅紝浣嗕篃鏈夋椂鍊欎細寰堝揩閫熴?br>鏈鍚庯紝緙栫▼璇█騫墮潪璁$畻鏈虹瀛︽妧鏈殑鍏ㄩ儴錛屽挨鍏跺浜庡湪鏍$殑瀛︾敓鏉ヨ錛屾墦濂藉熀紜銆佸紑闃旇閲庨兘鏄潪甯擱噸瑕佺殑銆?
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);鍏朵腑鍚勫弬鏁拌鏄庡涓嬶細
llpThreadAttributes錛氭寚鍚戜竴涓?SECURITY_ATTRIBUTES 緇撴瀯鐨勬寚閽堬紝璇ョ粨鏋勫喅瀹氫簡綰跨▼鐨勫畨鍏ㄥ睘鎬э紝涓鑸疆涓?NULL錛?
ldwStackSize錛氭寚瀹氫簡綰跨▼鐨勫爢鏍堟繁搴︼紝涓鑸兘璁劇疆涓?錛岃〃紺虹嚎紼嬪爢鏍堝ぇ灝忎笌鍒涘緩瀹冪殑綰跨▼鐩稿悓錛?
llpStartAddress錛氳〃紺烘柊綰跨▼寮濮嬫墽琛屾椂浠g爜鎵鍦ㄥ嚱鏁扮殑鍦板潃錛屽嵆綰跨▼鐨勮搗濮嬪湴鍧銆備竴鑸儏鍐典負(LPTHREAD_START_ROUTINE)ThreadFunc錛孴hreadFunc 鏄嚎紼嬪嚱鏁板悕錛屽嚱鏁板師鍨嬪涓嬶細
DWORD WINAPI threadfunc(LPVOID param);
llpParameter錛氭寚瀹氫簡綰跨▼鎵ц鏃朵紶閫佺粰綰跨▼鐨?2浣嶅弬鏁幫紝鍗崇嚎紼嬪嚱鏁扮殑鍙傛暟錛?
ldwCreationFlags錛氭帶鍒剁嚎紼嬪垱寤虹殑闄勫姞鏍囧織錛屽彲浠ュ彇涓ょ鍊箋傚鏋滆鍙傛暟涓?錛岀嚎紼嬪湪琚垱寤哄悗灝變細绔嬪嵆寮濮嬫墽琛岋紱濡傛灉璇ュ弬鏁頒負CREATE_SUSPENDED,鍒欑郴緇熶駭鐢熺嚎紼嬪悗錛岃綰跨▼澶勪簬鎸傝搗鐘舵侊紝騫朵笉椹笂鎵ц錛岀洿鑷沖嚱鏁癛esumeThread琚皟鐢紱
llpThreadId錛氳鍙傛暟榪斿洖鎵鍒涘緩綰跨▼鐨処D錛?/p>
DWORD WINAPI Func1(LPVOID param)

{
cout << "test" << endl;
MessageBox(NULL, "test", "title", MB_OK);
return 0;
}
int main()

{
HANDLE p;
DWORD a = 10;
DWORD id = 0;
p = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Func1, &a, 0, &id);
//WaitForSingleObject(p, INFINITE);
return 0;
}
2.綰跨▼鎮(zhèn)寕鍜屾仮澶嶏細鍒涘緩鏂扮殑綰跨▼鍚庯紝璇ョ嚎紼嬪氨寮濮嬪惎鍔ㄦ墽琛屻備絾濡傛灉鍦╠wCreationFlags涓嬌鐢ㄤ簡CREATE_SUSPENDED鐗規(guī)э紝綰跨▼騫朵笉椹笂鎵ц錛岃屾槸鍏堟寕璧鳳紝絳夊埌璋冪敤ResumeThread鍚庢墠寮濮嬪惎鍔ㄧ嚎紼嬨?/p>
DWORD SuspendThread(HANDLE hThread);
//璇ュ嚱鏁扮敤浜庢寕璧鋒寚瀹氱殑綰跨▼錛屽鏋滃嚱鏁版墽琛屾垚鍔燂紝鍒欑嚎紼嬬殑鎵ц琚粓姝€?/span>
DWORD ResumeThread(HANDLE hThread);
//璇ュ嚱鏁扮敤浜庣粨鏉熺嚎紼嬬殑鎸傝搗鐘舵侊紝鎵ц綰跨▼銆?/span>
3.綰跨▼浼樺厛綰ф搷浣滐細
int GetThreadPriority(HANDLE hThread);
//璋冪敤璇ュ嚱鏁板緱鍒扮嚎紼嬩紭鍏堟潈銆?/span>
BOOL SetThreadPriority(HANDLE hThread,int nPriority);
//璋冪敤璇ュ嚱鏁版潵璁劇疆綰跨▼鐨勪紭鍏堟潈銆?/span>
4.綰跨▼閫鍑猴細褰撹皟鐢ㄧ嚎紼嬬殑鍑芥暟榪斿洖鍚庯紝綰跨▼鑷姩緇堟銆?/p>
//濡傛灉闇瑕佸湪綰跨▼鐨勬墽琛岃繃紼嬩腑緇堟鍒欏彲璋冪敤鍑芥暟錛?nbsp;
VOID ExitThread(DWORD dwExitCode);
//濡傛灉鍦ㄧ嚎紼嬬殑澶栭潰緇堟綰跨▼錛屽垯鍙皟鐢ㄤ笅闈㈢殑鍑芥暟錛?nbsp;
BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); 娉ㄦ剰錛?br>(1)TerminateThread鍑芥暟鍙兘浼氬紩璧風郴緇熶笉紼沖畾錛岃屼笖綰跨▼鎵鍗犵敤鐨勮祫婧愪篃涓嶉噴鏀俱傚洜姝わ紝涓鑸儏鍐典笅錛屽緩璁笉瑕佷嬌鐢ㄨ鍑芥暟銆? 鍚勫弬鏁板涓嬶細 娉ㄦ剰錛?br>(1)浣跨敤TerminateThread鍚庯紝闇璋冪敤CloseHandle( )鍑芥暟閲婃斁綰跨▼鎵鍗犵敤鐨勫爢鏍堛?br>(2)閲婃斁璧勬簮鍚庯紝灝嗙嚎紼婬ANDLE緗垚NULL銆?br>
(2)濡傛灉瑕佺粓姝㈢殑綰跨▼鏄繘紼嬪唴鐨勬渶鍚庝竴涓嚎紼嬶紝鍒欑嚎紼嬭緇堟鍚庣浉搴旂殑榪涚▼涔熷簲緇堟銆?
(3)閲婃斁璧勬簮鍚庯紝灝嗙嚎紼婬ANDLE緗垚NULL銆?br>(4)浣跨敤TerminateThread鍚庯紝闇璋冪敤CloseHandle( )鍑芥暟閲婃斁綰跨▼鎵鍗犵敤鐨勫爢鏍堛?/span>
MFC涓嬪綰跨▼緙栫▼涔嬪伐浣滅嚎紼嬬紪紼?/strong>
1.綰跨▼鍒涘緩錛?/p>
CWinThread*AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
l鍙傛暟pfnThreadProc鏄嚎紼嬫墽琛屼綋鍑芥暟錛屽嚱鏁板師褰負: UINT ThreadFunction( LPVOID pParam)銆?
l鍙傛暟pParam鏄紶閫掔粰鎵ц鍑芥暟鐨勫弬鏁幫紱
l鍙傛暟nPriority鏄嚎紼嬫墽琛屾潈闄愶紝鍙夊鹼細
THREAD_PRIORITY_NORMAL銆乀HREAD_PRIORITY_LOWEST銆乀HREAD_PRIORITY_HIGHEST銆乀HREAD_PRIORITY_IDLE銆?
l鍙傛暟dwCreateFlags鏄嚎紼嬪垱寤烘椂鐨勬爣蹇楋紝鍙彇鍊糃REATE_SUSPENDED錛岃〃紺虹嚎紼嬪垱寤哄悗澶勪簬鎸傝搗鐘舵侊紝璋冪敤ResumeThread鍑芥暟鍚庣嚎紼嬬戶緇繍琛岋紝鎴栬呭彇鍊?#8220;0”琛ㄧず綰跨▼鍒涘緩鍚庡浜庤繍琛岀姸鎬併?
l榪斿洖鍊兼槸CWinThread綾誨璞℃寚閽堬紝瀹冪殑鎴愬憳鍙橀噺m_hThread涓虹嚎紼嬪彞鏌勶紝鍦╓in32 API鏂瑰紡涓嬪綰跨▼鎿嶄綔鐨勫嚱鏁板弬鏁伴兘瑕佹眰鎻愪緵綰跨▼鐨勫彞鏌勶紝鎵浠ュ綋綰跨▼鍒涘緩鍚庡彲浠ヤ嬌鐢ㄦ墍鏈塛in32 API鍑芥暟瀵筽WinThread->m_Thread綰跨▼榪涜鐩稿叧鎿嶄綔銆?
娉ㄦ剰錛氬鏋滃湪涓涓被瀵硅薄涓垱寤哄拰鍚姩綰跨▼鏃訛紝搴斿皢綰跨▼鍑芥暟瀹氫箟鎴愮被澶栫殑鍏ㄥ眬鍑芥暟錛堟垨鑰呯被涓殑闈欐佸嚱鏁頒技涔庝篃鍙互錛夈?/span>
2.綰跨▼鎮(zhèn)寕鍜屾仮澶?/ 浼樺厛綰ф搷浣滐細鍚屼笂銆?br>
3.綰跨▼閫鍑猴細褰撹皟鐢ㄧ嚎紼嬬殑鍑芥暟榪斿洖鍚庯紝綰跨▼鑷姩緇堟銆?/p>
//綰跨▼鍙互鍦ㄨ嚜韜唴閮ㄨ皟鐢ㄦ潵緇堟鑷韓鐨勮繍琛屻?/span>
void AfxEndThread(UINT nExitCode, BOOL bDelete = TRUE);
//鍙互鍦ㄧ嚎紼嬬殑澶栭儴璋冪敤鏉ュ己琛岀粓姝竴涓嚎紼嬬殑榪愯銆?/span>
BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode );
榪涚▼闂撮氫俊
1.鍏ㄥ眬鍙橀噺鏂瑰紡錛?br>(1)榪涚▼鍜岀嚎紼嬪叡浜叏灞鍙橀噺錛屽彲鍒╃敤璇ュ叏灞鍙橀噺杈懼埌閫氫俊鐨勭洰鐨勩?br>(2)灝嗚繘紼嬬殑HADNLE浣滀負鍙傛暟浼犻掔粰綰跨▼鍑芥暟錛岀劧鍚庣嚎紼嬪彲鏍規(guī)嵁姝ANDLE瀵硅繘紼嬬殑鍙橀噺榪涜鎿嶄綔銆?br>
2.娑堟伅閫氫俊鏂瑰紡錛?/p>
BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL PostThreadMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam =0 );
榪斿洖鍊煎鏋滃叕甯冧簡娑堟伅錛屽垯榪斿洖闈為浂鍊鹼紱鍚﹀垯榪斿洖0銆?nbsp;
鍙傛暟message鎸囧畾浜嗚鍏竷鐨勬秷鎭?nbsp;
wParam鎸囧畾浜嗛檮鍔犵殑娑堟伅淇℃伅銆傝繖涓弬鏁扮殑鍐呭渚濊禆浜庤鍏竷鐨勬秷鎭?nbsp;
lParam鎸囧畾浜嗛檮鍔犵殑娑堟伅淇℃伅銆傝繖涓弬鏁扮殑鍐呭渚濊禆浜庤鍏竷鐨勬秷鎭?nbsp;
璇存槑錛氳繖涓嚱鏁板皢涓涓秷鎭斁鍏ョ獥鍙g殑娑堟伅闃熷垪錛岀劧鍚庣洿鎺ヨ繑鍥烇紝騫朵笉絳夊緟瀵瑰簲鐨勭獥鍙e鐞嗘秷鎭傛秷鎭槦鍒椾腑鐨勬秷鎭槸閫氳繃璋冪敤Windows鐨凣etMessage鎴朠eekMessage鍑芥暟鏉ヨ幏寰楃殑銆傚彲浠ラ氳繃Windows鐨凱ostMessage鍑芥暟鏉ヨ闂叾瀹冨簲鐢ㄧ▼搴忋?nbsp;
BOOL PostThreadMessage( UINT message , WPARAM wParam, LPARAMlParam );榪斿洖鍊煎鏋滄垚鍔燂紝鍒欒繑鍥為潪闆跺鹼紱鍚﹀垯榪斿洖0銆?nbsp;
鍙傛暟message鐢ㄦ埛鑷畾涔夋秷鎭殑ID銆?nbsp;
wParam絎竴涓秷鎭弬鏁般?nbsp;
lParam絎簩涓秷鎭弬鏁般?nbsp;
璇存槑錛氳皟鐢ㄨ繖涓嚱鏁頒互鍚戝叾瀹僀WinThread瀵硅薄鍙戦佷竴涓敤鎴瘋嚜瀹氫箟娑堟伅銆傚彂閫佺殑娑堟伅閫氳繃娑堟伅鏄犲皠瀹廜N_THREAD_MESSAGE琚槧灝勫埌閫傚綋鐨勬秷鎭鐞嗗嚱鏁般?nbsp;
3.鍚屾鏂瑰紡錛氬叿浣撳弬瑙?a href="http://m.shnenglu.com/andxie99/archive/2006/10/10/13517.html">http://m.shnenglu.com/andxie99/archive/2006/10/10/13517.html銆?br>
]]>
wchar_t c = `A' ;
wchar_t * p = L"Hello!" ;
wchar_t a[] = L"Hello!" ; 浠trcpy鍑芥暟涓轟緥瀛愶紝鎬葷粨涓涓嬶細
//濡傛灉浣犳兂浣跨敤ANSI瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楀啓娉曪細
char szString[100];
strcpy(szString,"test");
//濡傛灉浣犳兂浣跨敤Unicode瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楋細
wchar_t szString[100];
wcscpy(szString,L"test");
//濡傛灉浣犳兂閫氳繃瀹氫箟_UNICODE瀹忥紝鑰岀紪璇慉NSI鎴栬匲nicode瀛楃涓蹭唬鐮侊細
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
//char* to string :
char *a = "abcde";
string str = a;
//string to char*
char *a = str.c_str();
//wchar_t* to wstring
wchar_t *b = L"abcde";
wstring wstr = b;
//wstring to wchar_t*
wchar_t *b = wstr.c_str();
//wstring to string
std::string ws2s(const std::wstring& ws)

{
std::string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
std::string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
//string to wstring
std::wstring s2ws(const std::string& s)

{
setlocale(LC_ALL, "chs");
const char* _Source = s.c_str();
size_t _Dsize = s.size() + 1;
wchar_t *_Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest,_Source,_Dsize);
std::wstring result = _Dest;
delete []_Dest;
setlocale(LC_ALL, "C");
return result;
}