Barashada Aasaaska Tilmaamayaasha C iyo C++

Cusbooneysiintii ugu dambeysay: 12/02/2025
  • Tilmaamayaashu waxay matalaan cinwaannada xusuusta waxayna awood u siinayaan in si toos ah loo xakameeyo halka iyo sida xogta loo kaydiyo oo loo galo.
  • Dereferencing, const sixitaanka iyo xisaabinta tilmaamuhu waa lagama maarmaan in si badbaado leh loo isticmaalo tilmaameyaal leh habab, qaab-dhismeedyo iyo xusuus firfircoon.
  • Tilmaamayaashu waxay oggolaadaan in doodaha lagu gudbiyo tixraac, dhisidda qaabab firfircoon iyo hirgelinta jihooyin heerar badan ah sida tilmaame-u-tilmaame.
  • Jeegaga beenta ah, qoondaynta saxda ah/wax-is-waydaarsiga iyo habaynta anshaxa ayaa muhiim ah si looga fogaado dabeecadaha iyo shilalka aan la qeexin.

Tilmaamaha aasaasiga ah

Tilmaamayaasha C iyo C++ waxay leeyihiin sumcad halyeeyo ah: xoog badan, khiyaano leh, oo awood u leh inay ku burburiyaan barnaamijkaaga indho birbiqsi haddii aad taxaddar la'aan tahay. Hase yeeshee, marka aad si dhab ah u fahamto waxa tilmaamuhu yahay - kaliya ciwaanka xusuusta - qayb wanaagsan oo ka mid ah sirtaasi waxay bilaabataa inay meesha ka baxdo, waxaadna heli doontaa mid ka mid ah qalabka ugu waxtarka badan ee heerarka hoose iyo barnaamijyada.

Maqaalkani wuxuu si tallaabo tallaabo ah kuugu socdaa fikradda asaasiga ah ee cinwaannada xusuusta iyo tilmaamayaasha fudud, iyada oo loo marayo tixraacyo, qalabyo, fasallo iyo xusuusta firfircoon, dhammaan habka loo isticmaalo tusaha-ilaa-tilmaamaha kiisaska iyo dhibaatooyinka caadiga ah. Hadafka ayaa ah in la shaqeynta tilmaamayaasha ay dareemaan dabiici, ma aha sida sixirka mugdiga ah, si aad uga fikirto waxa run ahaantii ku dhacaya xusuusta marka koodkaagu socdo.

Fahamka doorsoomayaasha iyo cinwaannada xusuusta

xusuusta iyo doorsoomayaasha

Kahor intaadan taaban tilmaamaha, waxaad u baahan tahay sawir maskaxeed cad oo ku saabsan sida doorsoomayaashu ugu nool yihiin xusuusta. RAM-ka kombayuutarku fikrad ahaan waa hannaan dheer oo bytes ah, byte kastaa wuxuu ku calaameeyay ciwaanka tiro gaar ah. Marka aad ku dhawaaqdo doorsoome, iskudubariduhu waxa uu kaydinayaa mid ama in ka badan oo ka mid ah byteska iyo la-hawlgalayaasha ciwaanka ku leh doorsoomaha magaciisa.

Ka fakar doorsoome inuu yahay sanduuq calaamadeysan oo la dhigay meel xusuusta ah: magacu waa calaamadda, ciwaanku waa goobta jireed ee shelf, iyo waxa ku jira waa qiimaha lagu kaydiyo gudaha sanduuqa. Tusaale ahaan, haddii aad leedahay int Arduino UNO ee caadiga ah, waxay ku fadhiisan doontaa 2 bytes oo isku xigta RAM-ka, iyo xog ururiyaha diiwaanka ciwaannada saxda ah ee loogu talagalay.

Ku dhawaaqida doorsoome ayaa u sheegaysa isku-duwaha nooca iyo cabbirka uu u baahan yahay si uu u xafido, halka qeexida ama shaqada ay dhab ahaantii ku kaydinayso qiimaha goobtaas gaarka ah. Tusaale ahaan, qorista int j; kaliya waxa uu ku dhawaaqaa doorsoomiyaha oo u ogolaada in iskudubahu uu qoondeeyo xusuusta, halka j = 10; wuxuu ku qorayaa qiimaha nambarka 10 ee unugyada xusuusta ee ka tirsan j.

Guduhu, iskudubariduhu waxa uu hayaa miis calaamad ah halkaas oo uu ku sawiro magac kasta oo doorsooma ciwaanka xusuusta iyo nooca. Haddi isku-dubariduhu taas go'aansado j ku nool ciwaanka 2020, fikrad ahaan waxaad ka fikiri kartaa xaaladan oo kale: aqoonsiga j Tilmaamaha wax looga qabanayo 2020, iyo bytes-ka ku yaal ciwaanka 2020 wuxuu ka kooban yahay matalaadda laba-geesoodka ah ee 10.

Waa muhiim in la kala saaro fikradda ah "meesha wax lagu kaydiyo" (cinwaanka) iyo "waxa meeshaas ku kaydsan" (qiimihiisa). Aragtida compiler iyo buugaag badan, goobta waxaa badanaa loo yaqaan ' qiimo leh (laga bilaabo "qiimaha goobta"), halka waxa ku jira loo tixraacayo sida qiimee. Tilmaamayaashu waxay ku saabsan yihiin in si toos ah meelahaas loo maareeyo.

Waa maxay dhab ahaan tilmaamuhu?

aasaaska tilmaame

Tilmaamuhu si fudud waa doorsoome qiimihiisu yahay ciwaanka xusuusta oo tilmaamaya shay kale. Ma kaydiso xogta lafteeda, laakiin ciwaanka halka ay xogtaasi ku nooshahay. Cabbirka tilmaamuhu wuxuu ku xiran yahay qaab dhismeedka mashiinka: 32-bit x86 nidaamyada sida caadiga ah waa 4 bytes, 64-bit x86-64 nidaamyada badanaa waa 8 bytes, iyo microcontrollers yaryar sida Arduino ciwaanka ayaa laga yaabaa inuu ku habboon yahay 2 bytes.

Marka aad ku dhawaaqdo tilmaame, ma qeexayso in uu kaydinayo ciwaanka, laakiin sidoo kale nooca shayga uu tilmaamayo. Tusaale ahaan, int* p wuxuu tilmaamayaa a int. Xiddigga halkan waa qayb ka mid ah nooca, ma aha calaamad isku dhufasho, waxayna u sheegaysaa soo-sameeyaha inta bytes ee la akhrinayo ama la qorayo markaad hadhow gasho. *p.

Cinwaanka hawlwadeenka & wuxuu ku siinayaa ciwaanka shay jira, kaas oo aad ku kaydin karto doorsoome tilmaame. Ka soo qaad inaad leedahay int n = 0;; markaas code this kaydiyaa ciwaanka ee n tilmaame:

Tusaale: int n = 0;
int* p = &n; // p now holds the address of n

Marka tilmaamuhu hayo ciwaan sax ah, hawlwadeenka xad-gudubka * kuu ogolaanayaa inaad gasho shayga ku nool ciwaankaas. If p waa tilmaan u ah int, ka dibna *p u dhaqmo sida magac loo yaqaan integer-ka dhabta ah ee lagu kaydiyay xusuusta. Tusaale ahaan:

Qayb yar: *p = 1; // writes 1 into n through the pointer
std::cout << *p; // reads the current value of n

Fikradda muhiimka ah ayaa ah in xiddiggu uu ka dhigan yahay waxyaabo kala duwan oo kala duwan: marka lagu isticmaalo caddaynta waxay sameysaa nooca tilmaame, iyo marka loo isticmaalo odhaahda waxay ka leexisaa tilmaanta. Jahwareerka labadan door waa mid ka mid ah khaladaadka bilawga ah ee caadiga ah, markaa had iyo jeer u fiirso inaad ku dhawaaqayso tilmaame ama aad u isticmaalayso si aad u gasho xusuusta.

Aaladaha yaryar sida Arduino, tilmaame aan si toos ah loo bilaabin ama waxa uu hayaa ciwaan 16-bit ah oo sax ah ama waxa ku jira qashin. Ma jiro qiimo sixir ah oo "madhan" ilaa aad si ula kac ah ugu dejiso tilmaame null joogto ah sida nullptr ee C++. Dib-u-dejinta ciwaanka qashin-qubka noocan oo kale ah waa hab dhow oo lagu xidho xakamaynta-yarahaaga.

Const sax ah iyo noocyada kala duwan ee tilmaamayaasha

Tilmaamayaashu waxay la falgalaan const siyaabo marka hore jahawareer ku noqon kara, laakiin maaraynta tani waxay muhiim u tahay qoritaanka C++ saxda ah. Mawqifka const Xiddigta marka la eego ayaa go'aamisa in shayga farta lagu fiiqay, tilmaanta lafteeda, ama labadaba ay yihiin kuwo aan beddelmi karin.

Haddii aad leedahay shaandheyn joogto ah, nooca tilmaamuhu waa inuu ka tarjumayaa inaad akhrin karto oo keliya, ee aadan wax ka beddelin. Bal qiyaas koodkan:

demo: auto const cn = int{0}; // cn is a constant int
int const* p = &cn; // pointer to const int

Nooca p halkan waa "tilmaamaha joogtada ah ee int": waad akhrin kartaa *p laakiin uma xilsaari karo. Isku dayin int* p = &cn; waxay noqon doontaa qalad nooc ah, sababtoo ah taasi waxay ballan qaadaysaa inaad wax ka beddeli karto shay joogto ah, kaas oo ka mamnuuc ah luqadda.

Mararka qaarkood, shayga laftiisa ma aha mid la yaab leh, laakiin waxaad si ula kac ah u dooneysaa tilmaame u oggolaanaya in la akhriyo oo keliya. Xaaladdaas waxaad mar kale isticmaashaa int const*:

isticmaalka: auto n = int{0}; // non-const int
int const* p = &n; // can read n via p, but not write through p

U fiirso taas int const* iyo const int* micnaha saxda ah waa isku mid: tirada waxaa la akhriyaa-kaliya iyada oo la marayo tilmaame, laakiin tilmaame weli waa la bedeli karaa oo tilmaamaya meel kale. Dhanka kale, haddii aad wax qorto int* const p = &n;, waxaad leedahay a tilmaame joogto ah si aan sharci ahayn: ciwaanka lagu kaydiyay p lama bedeli karo ka dib bilowga, laakiin qiimaha *p waa u xor in ay kala duwanaato.

Waxaad xitaa isku dari kartaa labada foom si aad u abuurto tilmaame joogto ah oo joogto ah: int const* const p. Taasi waxay u sheegaysaa isu-duwaha in aanu ciwaanka midna ku jirin p sidoo kale qiimaha lagu kaydiyay ciwaankaas looma ogola inuu isbedelo. Fahamka kala duwanaanshiyahan waxay kaa caawinaysaa inaad si cad u qeexdo ulajeeddada, ururiyahana wuxuu kugu ilaalin doonaa daacadnimo.

Tilmaamaha qaab-dhismeedka iyo fasallada

Marka tilmaamuhu tixraacayo qaab-dhismeedka ama fasalka, waxaad caadi ahaan dooneysaa inaad gasho interface-keeda dadweynaha: xubnaha xogta iyo hawlaha xubnaha. Dereferencing leh * weli wuu shaqeeyaa, laakiin syntax-ku wuxuu noqon karaa xoogaa hadal ah, marka C++ wuxuu bixiyaa hawlwadeenka fallaadha -> sida gacan gaaban.

Tixgeli mid fudud Student qaab dhismeed leh darajooyin iyo hab xisaabiya celceliska. If Student* p haya ciwaanka a Student shay, waad qori kartaa (*p).grade_2 si ay u gaaraan fasalka labaad, ama (*p).average() in loo yeedho shaqada xubinta.

Hawlwadeenka fallaadha waxa uu isku daraa ka-hortagga iyo gelitaanka xubinta hal tallaabo: p->grade_2 iyo p->average() macnaheedu waa isku mid (*p).grade_2 iyo (*p).average(). Daboolka hoostiisa, p->member si fudud waa sonkorta syntactic for (*p).member. Taasi waa sababta aad had iyo jeer u arki doonto -> loo isticmaalo koodka adduunka-dhabta ah marka laga hadlayo tilmaamayaasha walxaha.

Ilaa iyo inta fasalka uusan xad dhaaf ah operator* or operator-> dabeecad qalaad, waad daweyn kartaa p->member sida habka caadiga ah ee lagu galo shayga ka dambeeya tilmaame. Nidaamyo badan ayaa ku tiirsan culeyska xad-dhaafka ah ee hawl-wadeennadan tilmaamayaal caqli-gal ah, laakiin fikrad ahaan, waxay wataan macno isku mid ah: raac tilmaanta ka dibna gal xubinta.

Tilmaamaha aan tooska ahayn iyo badbaadada

Tilmaame aan hadda tixraacin shay sax ah ayaa la sheegay inuu buray, casrigan C++ sidda canonica ah ee lagu muujinayo tan waa nullptr. Qoraalka int* p = nullptr; si cad ayuu u sheegayaa p weli ma tilmaamin meel macno leh.

Ka-hortagga tilmaame null waa dabeecad aan la qeexin, taasoo caadi ahaan horseedda shilalka, xadgudubyada gelitaanka, ama looxyada yaryar, nidaam la qaboojiyey. Taasi waa sababta koodka hela tilmaame halbeeg ahaan inta badan u hubiyaa in uu buray ka hor inta aan la isticmaalin. Haddii caqligaagu u ogolaado "wax ma jiro" xaalad macno leh, halbeegga tilmaamuhu waa ku habboon yahay, sababtoo ah waxay qaadi kartaa macluumaadka "maqan" iyada oo loo marayo nullptr.

Tusaalaha sarbeebtu waa shaqo beddeleysa xadhigga qaabka C (char const*) ilaa std::string laakiin waa in uu si xarrago leh u maareeyo kiiska halka tilmaamuhu waxba ka jirin. Shaqadu waxay hubinaysaa in tilmaamuhu aanu waxba ka jirin ka hor inta aan la dhisin std::string. Haddii ay waxba ka jirin, waxay soo celinaysaa xadhig madhan halkii ay ka ahayd ciwaan aan shaqaynayn.

Haddii halbeeggu uu yahay mid khasab ah oo aanu maqnaan karin, tixraacyada C++ ayaa inta badan ka door wanaagsan tilmaamayaasha cayriin. Tixraaca dib looma fadhiisin karo oo loolama jeedo in uu buro, sidaa awgeed nidaamka nooca ayaa si cad u muujinaya rajada ah in qofka soo wacay uu bixiyo shay sax ah. Tani waxay API ka dhigaysa mid badbaado leh oo koodna si fudud ayaa loo sababayn karaa.

Tilmaamayaasha sida cabbirada shaqada: qiimaha vs tixraac

Sida caadiga ah, marka aad doorsoomaha u gudbiso shaqada C ama C++, waxa lagu gudbiyaa qiime: shaqadu waxa ay helaysaa koobiga qiimaha doodda, ma aha doorsoomaha asalka ah. Taas macneheedu waxa weeye hawl kasta oo lagu sameeyo halbeegyada gudaha shaqada waxay saameeyaan oo keliya nuqulka maxalliga ah oo ka tag doorsoomaha soo wacaha oo aan isbeddelin.

Dabeecaddani inta badan waa mid la jecel yahay - waxay kacdaa shaqooyinka waxayna ka fogaataa saameynaha la yaabka leh - laakiin mararka qaarkood waxaad dhab ahaantii dooneysaa shaqo aad ku beddesho doorsoomayaasha soo wacaha. Waxaa laga yaabaa inaad ku fikirto inaad isticmaasho doorsoomayaasha caalamiga ah, laakiin marka ay barnaamijyadu koraan, caalamiyadu waxay si dhakhso ah u noqdaan kuwo adag in la raad raaco oo khaladaad u nugul.

Tilmaamayaashu waxay bixiyaan beddel nadiif ah: waxaad u gudbisaa ciwaanka doorsoomiyaha shaqada, shaqaduna waxay markaa bedeli kartaa qiimaha cinwaankaas. Tan waxaa loo yaqaan "ku-gudbinta tixraaca iyada oo loo marayo tilmaame". Gudaha C++, waxaad sidoo kale isticmaali kartaa cabbirada tixraaca (int&), kuwaas oo inta badan ka sii cad, laakiin fahamka qaabka tilmaamuhu weli waa lama huraan.

Bal qiyaas shaqo double_value taasi waa in ay labanlaabtaa tirada lagu qeexay qofka soo wacay. Isticmaalka interface ku salaysan tilmaame, waxaad u caddaynaysaa inay tahay qaadashada int*, oo wac adiga oo gudbiya ciwaanka doorsoomahaaga: double_value(&k);. Gudaha shaqada, *k = *k * 2; cusboonaysiinta qiimaha asalka ah iyada oo loo marayo tilmaame.

Farsamadani waxay sidoo kale u oggolaanaysaa shaqada inay si wax ku ool ah u "soo celiso" natiijooyin badan iyadoo wax laga beddelayo doorsoomayaal dhowr ah oo cinwaanadooda loo gudbiyay dood ahaan. Halkii aad ka soo celin lahayd qaab dhismeed adag, waxaad aqbali kartaa dhawr cabbir oo tilmaame ah oo aad cusboonaysiin kartaa dhamaantood. C++ casriga ah waxaad caadi ahaan doorbidi lahayd tixraacyo, tuples ama qaab-dhismeed si loo caddeeyo, laakiin cabbiraadaha tilmaamuhu waxay ku caan yihiin API-yada hoose iyo maktabadaha C.

Xisaabiyaha tilmaame iyo hannaan

Mid ka mid ah kuwa ugu xoogga badan - uguna khatarta badan - dhinacyada tilmaamayaashu waa xisaabinta tilmaamayaasha, gaar ahaan marka la eego macnaha guud. C iyo C++, array waxa loo kaydiyaa sidii qayb ka mid ah curiyayaasha xusuusta ee isku xidha, oo magaca array-ga waxa uu u qudhmi karaa tilmaame kiisa koowaad marka loo gudbiyo shaqada ama loo isticmaalo tibaaxaha qaarkood.

Hadii aad cadeyso char h[] = {'P','r','o','m','e','t','e','c','\n'};, ka dibna h waxaa loola dhaqmi karaa tilmaame ahaan h[0]. Helitaanka h[i] fikrad ahaan waxay u dhigantaa xisaabinta *(h + i), halkaas oo h waa cinwaanka saldhiga iyo i waa ka-goynta curiyeyaasha (ma aha bytes). Isku-dubariduhu wuu tarminayaa i iyadoo la eegayo cabbirka curiye kasta (1 byte ee char, 4 bytes loogu talagalay intiwm) intaadan ku darin tilmaame.

Taas macneheedu waxa weeye marka aad aragto odhaah sida *(h + i), waxaad samaynaysaa xisaab tilmaameedka caadiga ah: waxaad hormarisaa tilmaame h by i jagooyin ka dibna ka leexin natiijada. Sababaha waxqabadka awgood, isku-dubaridyadu aad bay ugu wanaagsan yihiin hagaajinta qaabkan, waana sababta C arrays iyo tilmaamuhu ay taariikh ahaan u ahaayeen isku-dhafka caanka ah ee shaqada heerka hoose.

Waxa kale oo aad samayn kartaa tilmaame cad oo ah shayga ugu horreeya ee shaxanka iyo kordhinta tilmaame si aad u dhex marto shaxanka. Tusaale ahaan, ku dhawaaqida char* ptr = h; ka dibna si isdaba joog ah u daabaco *ptr++ si wareeg ah ayaa jilaa kasta u mari doona si isku xigta. Dib u hagaajinta ++ wuxuu hormariyaa tilmaanta ka dib marin kasta, isaga oo u wareejinaya qaybta soo diyaarsan ee soo socota.

Habkan isafgaradka ah waa sarbeeb C, laakiin waxay u noqon kartaa qarsoodi dadka cusub, sidaas darteed C++ casriga casriga ah qaar badan oo ka mid ah horumarinta ayaa doorbidaya qaabab badan oo cad sida for siddo leh tusmooyin ama kala duwanaansho ku salaysan siddo. Weli, fahamka xisaabinta tilmaamuhu waa lagama maarmaan akhrinta iyo ilaalinta xeerka dhaxalka, iyo sidoo kale hirgelinta hawl-qabadyada muhiimka ah.

Xusuusta firfircoon, cusub/tirtirka iyo ku celcelinta tilmaamayaasha

Tilmaamayaashu sidoo kale waa gacanta aasaasiga ah ee aad hesho marka aad u qoondaynayso walxaha si firfircoon dukaanka xorta ah (badanaa si aan rasmi ahayn loogu yeero taallo). Gudaha C++, hawlwadeenka new ku celiyaa tilmaame shayga cusub ee loo qoondeeyay, iyo delete waxay xoraysaa xusuustaas marka aanad u baahnayn.

Tusaale ahaan, Student* p = new Student{...}; waxay kaydisaa xasuus ku filan mid Student shay oo soo celiyaa ciwaankeeda. Adigu markaa isticmaal p->member si ay u helaan xubnahooda ama wacaan hababkeeda. Marka shayga aan loo baahnayn, delete p; wuu baabi'iyaa oo xusuusta ku soo celiyaa dukaanka xorta ah.

C++ sidoo kale waxay ogolaataa qoondaynta arrays si firfircoon iyadoo la isticmaalayo new[], kaas oo ku soo celinaya tilmaanta qaybta koowaad ee shaxda. Tusaale ahaan, Student* p = new Student[100]; u qoondeeyay boos 100 ah Student walxaha si isdaba joog ah loo dhigay xusuusta, oo leh p isagoo tilmaamaya curiyaha ku yaal index 0.

Isticmaalka xisaabinta tilmaame, tibaaxaha p + i tilmaamaya i- element in array, sidaas (p + 4)->grade_1 waxay u dhigantaa p[4].grade_1. Fikrad ahaan, p waa sida dib-u-eegis ka bilaabma curiyaha koowaad, iyo p + i horu marinta dib u habayntaas i tillaabooyinka dhinaca safafka.

Farqiga u dhexeeya tilmaamuhu wuxuu kaloo xambaarsan yahay macne: haddii q = p + 4;, ka dibna q - p waxa lagu qiimeeyaa 4, taas oo ah tirada curiyayaasha u dhexeeya labadaas tilmaame. Dareenkan, tilmaame cayriin ayaa ah qaabka ugu fudud ee ku celcelinta-helitaanka random-ka. Qaar badan oo ka mid ah weelasha STL waxay daaha ka rogaan qalabeeyayaasha u dhaqma si isku mid ah, laakiin waxay qariyaan faahfaahinta tilmaame cayriin ee badbaadada iyo dabacsanaanta.

Inkastoo ceeriin new/delete waa kuwa awood badan, C++ casriga ah waxay si xoog leh u dhiirigelinayaan adeegsiga tilmaameyaal caqli-gal ah iyo RAII (Resource Acquisition Is Initialization) si ay si toos ah u maareeyaan kheyraadka. Tilmaamayaal caqli badan sida std::unique_ptr iyo std::shared_ptr koobay lahaanshaha oo si otomaatig ah xusuusta xorta ah marka aan loo baahnayn, taas oo yaraynaysa halista daadinta iyo tirtiridda labanlaab.

Tilmaamaha tilmaamayaasha iyo jihaynta qoto dheer

Marka aad ku qanacdo tilmaameyaal fudud, waxa aad si lama filaan ah ula kulmi doontaa tilmaameyaal (iyo mararka qaarkood xitaa heerar sare oo jiho ah). Fikrad ahaan, tilmaanta tilmaamuhu waa doorsoome kale oo haya ciwaanka doorsoome tilmaame, halkii uu si toos ah u tixraaci lahaa int, double ama shay.

Kiis adeegsiyeedka ugu cad ayaa ah maaraynta tilmaameyaal si firfircoon loo qoondeeyey, sida miis si firfircooni leh loo dhisay oo xargaha firfircooni loo qoondeeyey. C cad, tusaale caadi ah waa char** argv ee main function, kaas oo tilmaame u ah isku dubaridka xargaha-style-ka C, oo mid walba laftiisu yahay a char*.

Xaalad kale oo soo noqnoqota ayaa ah marka shaqada ay tahay inay wax ka beddesho tilmaame uu bixiyo soo wacaha, ma aha oo kaliya xogta uu tilmaamayo. U gudbinta tilmaanta tilmaamuhu waxay u oggolaanaysaa shaqada inay beddesho shayga tilmaamuhu tilmaamayo, ama in la bilaabo iyada oo loo qoondeynayo shay cusub new or malloc. Koodhka wicitaanku wuxuu markaas arkayaa qiimaha tilmaame ee la cusboonaysiiyay.

Heerar badan oo jiho ah ayaa sidoo kale si dabiici ah uga muuqda qaab-dhismeedka xogta qaarkood, gaar ahaan qaab-dhismeedka xogta ee isku xidhan ee lagu abuuray tuubada. Tusaale ahaan, liis si firfircoon loo dhisay oo noodyada loo qoondeeyay malloc or new Waxa laga yaabaa inay ku lug yeelato tilmaamayaasha qanjidhada, oo ay weheliso hawlo hela tilmaamayaasha si ay u geliyaan ama uga saaraan curiyeyaasha marka la cusboonaysiinayo tilmaamayaasha madaxa.

Dabcan, habab dhaqdhaqaaq badan oo cabbirro badan leh ayaa sida caadiga ah loo soo bandhigaa tilmaamayaal ku jira is-dhex-galka qaabka C-style: "matrix" waxaa caadi ahaan loo qaabeeyey sida int**, halkaas oo shay kasta oo cabbirka koowaad ka mid ah uu yahay tilmaame si toos ah. C++ casriga ah waxa laga yaabaa inaad door bidayso std::vector<std::vector<T>> ama fasalada matrixka caadiga ah, laakiin jaantusyada tilmaame-ilaa-tilmaamuhu waxay ahaanayaan aasaaska API-yada hoose iyo xidhidhiyeyaasha.

Dabinnada caadiga ah iyo dhaqamada wanaagsan ee tilmaamayaasha

Ku shaqaynta tooska ah ee tilmaamayaasha waxay ku siinaysaa kontorool wanaagsan, laakiin sidoo kale waxay albaabka u furaysaa khaladaadka qarsoon oo ay adagtahay in la saxo haddii aanad edbin. Kutaanno badan oo halyeeyo ah oo ku yaal C iyo C++ codebases waxay hoos ugu dhacaan si xun u maamulida ciwaannada cayriin, ha ahaato qoraal xusuus ah oo aan adiga lahayn ama adoo illoobaya maaraynta walaxda nolosha.

Hal qalad oo caadi ah ayaa ah qorista bytes ka badan inta nooca bartilmaameedku hayn karo, ama si khaldan loo turjumayo nooca goobta xusuusta. Tusaale ahaan, haddii aad kaydiso a long qiimaha ku jira int doorsooma ama qor a long meel lagu qiyaaso oo kaliya int, waxaad ku dhammaynaysaa inaad dib u qorto xusuusta ku xigta, oo ay suurtogal tahay inay kharribto doorsoomayaasha kale ama xitaa tilmaamayaasha koodka.

Khatar kale ayaa ah in si toos ah loo qoondeeyo qiyamka tirooyinka aan sabab lahayn doorsoomayaasha tilmaamayaasha, sida ptrNum = 7;, ilaa aad samaynayso shaqo nidaam aad u hooseeya oo aad si sax ah u garanayso waxa ku nool ciwaankaas. Koodhka codsiga caadiga ah, ula-dhaqanka lambarrada cinwaan ahaan waa xariiq toos ah oo lagu socdo dabeecadaha aan la qeexin iyo shilalka khaldan.

In la iloobo in si sax ah loo bilaabo tilmaamuhu sidoo kale waa khatar: tilmaame sita qiime aan la garanayn ayaa laga yaabaa inuu u ekaado mid fiican laakiin wuxuu tilmaamayaa meel kasta oo xusuusta ah. Had iyo jeer bilow tilmaantaada - ama ciwaan sax ah ama ku nullptr - oo iska hubi ka hor inta aanad joojinin haddii uu jiro wax shaki ah inay buray.

Ugu dambeyntii, xusuusta firfircoon, cayriin kasta new waa in lagu daraa mid u dhigma delete, iyo wax kasta new[] oo leh mid sax ah delete[]. Diidashadu waxay dhacdaa marka aad lumiso raadraaca xusuusta firfircoon ee loo qoondeeyey adiga oo aan tirtirin, oo laba jeer tirtirto (ama tirtirto xusuusta aanad adigu lahayn) ay kharribaan dhismeyaasha gudaha ee qoondeeyaha, kuwaas oo inta badan dusha u soo baxa sida cilladaha soo noqnoqda oo aad u adag in la soo saaro.

Si taxadar leh loola tacaalo, tilmaamayaashu waxay u eg yihiin qalab fiiqan, oo si fiican isku dheeli tiran marka loo eego isha qallafsan ee aan tooska ahayn: waxay kuu oggolaanayaan inaad sabab uga dhigto qaabka xusuusta barnaamijkaaga, naqshadeeyaan qaab-dhismeed xog hufan, oo ay ka dhisaan muuqaallo awood leh oo ku sarreeya kantaroolka heerka hoose. Markaad ku celcelinayso, u kala guurista ciwaannada, ka-noqoshada, iyo fahamka sida hawlaha iyo hababku ula falgalaan tilmaamuhu waxay noqonayaan dabeecad labaad, cabsida bilowga ahna waxay siinaysaa hab ixtiraam caafimaad leh iyo faa'iido badan oo la taaban karo.

Related posts: