>> [Daqq tal-mużika]
>> Doug LLOYD: pointers, aħna qegħdin hawn.
Dan huwa probabbilment se tkun is-suġġett aktar diffiċli
li nitkellmu dwar fil CS50.
U jekk inti stajt taqra xejn dwar pointers
qabel ma tista 'tkun xi ftit intimidanti nidħlu dan il-video.
Huwa veru l-pointers ma jippermettu l-abbiltà
li forsi screw up pretty ħażin meta int
jaħdmu ma 'varjabbli, u d-data, u jikkawżaw programm tiegħek li jikkraxxja.
Iżda dawn qed attwalment verament utli u dawn jippermettu us mod verament kbir
li jgħaddu data b'lura u lura bejn il-funzjonijiet,
li aħna qed inkella kapaċi jagħmlu.
>> U hekk dak li aħna verament trid tagħmel hawnhekk hija tren
int għandek id-dixxiplina pointer tajba, sabiex li tista 'tuża indikaturi effettiv
li jagħmlu programmi tiegħek li ħafna aħjar.
As I said pointers tagħtina differenti mod biex jgħaddu data bejn il-funzjonijiet.
Issa jekk inti recall minn video qabel, meta
konna nitkellmu dwar ambitu varjabbli, semmejt
li l-informazzjoni kollha li aħna jgħaddu bejn funzjonijiet C jiġi mgħoddi mill-valur.
U jien ma użatx din l tul, dak I fisser hemm
kienet li aħna qed jgħaddu kopji tad-data.
Meta aħna jgħaddu varjabbli għal funzjoni, aħna mhux qed attwalment jgħaddi l-varjabbli
għall-funzjoni, id-dritt?
Aħna qed tgħaddi kopja ta ' li d-data għall-funzjoni.
Il-funzjoni ma dak li se u jikkalkola xi valur,
u forsi nużaw dak il-valur meta hija tagħti lura.
>> Kien hemm eċċezzjoni waħda għal din ir-regola li tgħaddi mill-valur,
u aħna ser terga 'lura għal dak li huwa xi ftit aktar tard f'dan il-video.
Jekk nużaw pointers minflok ta 'użu varjabbli,
jew minflok tintuża l-varjabbli huma stess jew kopji tal-varjabbli,
aħna issa jistgħu jgħaddu l-varjabbli madwar bejn il-funzjonijiet b'mod differenti.
Dan ifisser li jekk nagħmlu bidla fil-funzjoni waħda,
li l-bidla fil-fatt se tieħu effett fil-funzjoni differenti.
Għal darb'oħra, din hija xi ħaġa li aħna ma setgħux jagħmlu qabel,
u jekk inti stajt qatt ppruvaw tpartit l- valur ta 'żewġ varjabbli fi funzjoni,
inti ħadthom ndunat din il-problema tip ta 'creeping up, right?
>> Jekk irridu li tpartit X u Y, u aħna jgħaddihom għal funzjoni msejħa tpartit,
ġewwa tal-funzjoni tpartit l- varjabbli do valuri tal-kambju.
Wieħed isir tnejn, tnejn isir wieħed, iżda aħna ma attwalment
tbiddel xejn fl-oriġinal funzjoni, fl-sejjieħ.
Għaliex aħna ma jistgħux, aħna qed biss ħidma ma kopji tagħhom.
Bil pointers għalkemm, nistgħu fil-fatt jgħaddu X u Y għal funzjoni.
Dik il-funzjoni tista 'tagħmel xi ħaġa magħhom.
U dawk il-valuri varjabbli jistgħu attwalment bidla.
Allura dak pjuttost bidla fil kapaċità tagħna li jaħdmu bid-data.
>> Qabel ma aħna adsa fis pointers, I think hi ta 'valur
tieħu ftit minuti biex mur lura għall bażiċi hawn.
U agħti ħarsa lejn kif xogħlijiet memorja tal-kompjuter
minħabba li dawn żewġ suġġetti huma għaddejjin li attwalment tkun pretty interrelatati.
As you know probabbilment, fuq sistema tal-kompjuter tiegħek
ikollok a hard drive jew forsi stat drive solidu,
xi tip ta 'post ta' ħażna fajl.
Huwa ġeneralment x'imkien fil- viċinat ta '250 gigabytes
li forsi ftit terabytes issa.
U huwa fejn kollha ta 'tiegħek fajls finalment jgħixu,
anke meta l-kompjuter tiegħek ikun mitfi off, inti tista 'ddawar lura fuq
u inti ser issib fajls tiegħek hemm għal darb'oħra meta inti reboot sistema tiegħek.
Iżda drives disk, bħal hard disk drive, HDD, jew stat drive solidu, SSD,
huma spazju għall-ħażna biss.
>> Aħna ma tistax attwalment tagħmel xejn ma id-data li hija fil-hard disk,
jew fi stat solidu drive.
Sabiex attwalment ibiddlu data jew jiċċaqalqu madwar,
irridu jmexxuha għal RAM, memorja t'aċċess bl-addoċċ.
Issa RAM, ikollok ħafna inqas ta 'fil-kompjuter tiegħek.
Inti jista 'jkollok x'imkien fil- viċinat ta '512 megabytes
jekk għandek kompjuter anzjani, li forsi tnejn, erba, tmienja, 16,
possibilment anki ftit aktar, gigabytes ta 'RAM.
Allura dak ħafna iżgħar, iżda li fejn kollha tad-data volatili jeżisti.
Li meta nistgħu nbiddlu l-affarijiet.
Iżda meta ngħaddu kompjuter tagħna off, kollha tad-data fil-RAM hija meqruda.
>> Allura huwa għalhekk li għandna bżonn li jkollhom hard disk għall-lokazzjoni aktar permanenti ta 'dan,
b'tali mod li exists- dan iwassal tkun tassew ħżiena jekk kull darba we
daru kompjuter tagħna off, kull fajl fis-sistema tagħna kienet jitħassru.
Allura naħdmu ġewwa ta 'RAM.
U kull darba aħna qed jitkellem dwar memorja, pretty ħafna, fil CS50,
aħna qed jitkellem dwar RAM, mhux hard disk.
>> Allura meta aħna l-affarijiet jimxu fil-memorja, hija tieħu up ċertu ammont ta 'spazju.
Kollha tat-tipi ta 'dejta li aħna kont qed taħdem ma
jieħdu differenti ammonti ta 'spazju fil-RAM.
Allura kull darba li inti toħloq numru sħiħ varjabbli, erba 'bytes ta' memorja
huma mwarrba fl RAM sabiex inti jistgħu jaħdmu ma 'dak numru sħiħ.
Inti tista 'tiddikjara n-numru sħiħ, jibdlu, tassenja din
għal valur 10 inkrementat minn wieħed, hekk u hekk.
Dak kollu li jeħtieġ li jiġri fil RAM, u ikollok erba 'bytes
biex jaħdmu ma għal kull numru sħiħ li inti toħloq.
>> Kull karattru inti toħloq gets byte wieħed.
Li jinsab biss kif ħafna spazju hija meħtieġa biex jaħżnu karattru.
Kull float, reali numru, gets erba 'bytes
sakemm huwa a double preċiżjoni floating point
numru, li tippermetti li inti ikollhom ċifri iktar preċiżi jew aktar
wara l-punt deċimali mingħajr ma jitilfu preċiżjoni,
li jieħdu tmien bytes ta 'memorja.
Twal twal, interi verament kbir, wkoll jieħdu tmien bytes ta 'memorja.
Kemm bytes ta 'memorja do kordi jieħdu?
Well ejja tpoġġi pin f'dak kwistjoni għal issa, iżda aħna ser terga 'lura għal dan.
>> Allura lura għall din l-idea tal-memorja kif firxa kbira ta 'ċelluli ta' daqs byte.
Li verament kollox huwa, huwa biss firxa enormi ta 'ċelluli,
bħal kull firxa oħra li int familjari ma 'u tara,
ħlief kull element huwa byte wieħed wiesa '.
U bħad firxa, kull element ikollu l-indirizz.
Kull element ta 'firxa għandu indiċi, u aħna
jista 'juża dik l-indiċi li tagħmel hekk imsejħa t'aċċess bl-addoċċ fuq il-firxa.
Aħna ma jkollhom biex tibda fil il-bidu tal-firxa,
jtenni permezz ta 'kull element uniku tiegħu,
biex issib dak li aħna qed tfittex.
Nistgħu biss jgħidu, nixtieq li jasal sal- 15 element jew element 100.
U inti tista 'biss jgħaddu dak in-numru u jiksbu l-valur li qed tfittex.
>> Bl-istess mod kull post fil-memorja għandha l-indirizz.
Allura memorja tiegħek jista tfittex xi ħaġa bħal din.
Hawn blokki żgħir ħafna ta ' memorja, dan huwa 20 bytes ta 'memorja.
L-ewwel 20 bytes għaliex tiegħi tindirizza hemm fil-qiegħ
huma 0, 1, 2, 3, u għalhekk fuq it-triq kollha sa 19.
U meta Niddikjara varjabbli u meta I tibda taħdem magħhom,
is-sistema se jistabbilixxu twarrab xi spazju għalija
f'dan memorja li jaħdmu ma 'varjabbli tiegħi.
So I jista 'jgħid, char c ugwali kapital H. U x'inhu jiġri?
Ukoll is-sistema se imwarrba għalija wieħed byte.
F'dan il-każ hija għażlet għadd byte erba, il-byte fl-indirizz erba,
u li għaddej biex jaħżnu l- H kapital ittra fil hemm għalija.
Jekk I imbagħad ngħid veloċità int limitu ekwivalenti għal 65, huwa
ser titwarrab erba bytes ta 'memorja għalija.
U li għaddej biex jikkura dawk erba 'bytes bħala unità waħda
għaliex dak li aħna qed jaħdmu ma huwa integer hawn.
U li għaddej biex jaħżnu 65 fil hemmhekk.
>> Issa diġà jien tip ta ' tghidlek daqsxejn ta jimteddu,
dritt, għaliex aħna nafu li kompjuters jaħdmu binarja.
Huma ma jifhmux neċessarjament dak kapital H hija
jew dak 65. huwa, huma biss jifhmu binarja, żerijiet u dawk.
U hekk fil-fatt dak aħna qed ħażna fil hemm
mhuwiex l-ittra H u n-numru 65, iżda pjuttost il-rappreżentanzi binarja
tiegħu, li tfittex ftit xi ħaġa bħal din.
U b'mod partikolari fil- kuntest tal-varjabbli numru sħiħ,
mhuwiex ser biss bżiq fi, huwa mhux ser titratta dan bħala wieħed erba
blokki byte neċessarjament, huwa attwalment għaddejjin
sabiex titratta dan bħala erba waħda biċċiet byte, li tista 'tidher xi ħaġa bħal din.
U anki dan mhux kompletament veru jew,
minħabba xi ħaġa imsejħa l endianness, li aħna mhux qed
se jsibu rwieħhom issa, iżda jekk int kurjuż dwar,
inti tista 'taqra fuq ftit u endianness kbar.
Iżda għall-finijiet ta 'dan l-argument, għall-fini ta 'dan il-video,
ejja biss wieħed jassumi li hija, fil fatt, kif in-numru 65 se
tkun rappreżentata fil memorja fuq kull sistema,
għalkemm mhuwiex kompletament veru.
>> Imma ejja fil-fatt biss tikseb rid ta 'kollha binarja għal kollox,
u biss jaħsbu dwar kif H u 65, huwa ħafna aktar faċli
biex jaħsbu dwar dan simili li bħala bniedem.
Kull dritt, hekk jidher ukoll forsi ftit każwali li I've- sistema tiegħi
ma jagħtu me bytes 5, 6, 7, u 8 biex jaħżnu l-eqreb numru sħiħ.
Hemm raġuni għal dan, wisq, li aħna mhux se jsibu rwieħhom dritt issa, iżda huwa biżżejjed
ngħid li dak l- kompjuter qed tagħmel hawn
huwa probabbilment pass tajjeb min-naħa tagħha.
Biex ma jagħtux me memorja li l- neċessarjament lura lura.
Għalkemm li għaddej biex tagħmel dan issa jekk I rridu nġibu string ieħor,
imsejħa kunjom, u nixtieq li jpoġġu Lloyd fil hemmhekk.
Jien ser jeħtieġ li jitwaħħal wieħed karattru, kull ittra ta 'dak l
se jitlob wieħed karattru, byte wieħed ta 'memorja.
Mela jekk jien tista 'tpoġġi Lloyd fis firxa tiegħi bħal dan jien pretty tajba biex tmur, id-dritt?
X'hemm nieqes?
>> Ftakar li kull sekwenza naħdmu magħhom C tispiċċa bil backslash żero,
u ma nistgħux jħalli barra li hawn, lanqas.
Għandna bżonn li jitwarrbu byte wieħed tal-memorja li jiġi kkonstatat li hekk aħna
jafu meta string tagħna ikun intemm.
Għalhekk għal darb'oħra dan l-arranġament ta 'l-affarijiet mod
jidhru fl-jista memorja jkun ftit każwali,
iżda fil-fatt huwa kif bosta sistemi huma mfassla.
Għal-linja up fuq multipli ta 'erba', għal raġunijiet darb'oħra
li ma kellniex bżonn biex jsibu rwieħhom dritt issa.
Iżda dan, hekk huwa biżżejjed li jingħad li wara dawn it-tliet linji ta 'kodiċi,
dan huwa dak memorja jista 'dehra.
I Jekk bżonn postijiet memorja 4, 8, u 12 sabiex tinżamm data tiegħi,
dan huwa dak memorja tiegħi jista 'dehra.
>> U biss tkun partikolarment pedantic hawn, meta
aħna qed jitkellem dwar memorja indirizzi aħna normalment
tagħmel hekk billi tuża notazzjonijiet hexadeċimali.
Allura għaliex ma we jikkonvertu kollha ta 'dawn minn deċimali għall eżadeċimali
biss għaliex dan huwa ġeneralment kif aħna nirreferu għall-memorja.
Allura minflok ma 0 sa 19, dak li għandna huwa żero
x żero permezz żero x1 tlieta.
Dawn huma l-20 bytes ta 'memorja li aħna jkunu jew aħna qed tħares lejn fil din id-dehra
dritt hawn.
>> Allura kollha ta 'dak being said, ejja pass lil hinn mill-memorja għat-tieni
u lura għall pointers.
Hawn hu l-aktar importanti ħaġa li tiftakar
kif aħna tibda taħdem ma pointers.
A pointer huwa xejn aktar minn indirizz.
I ser ngħid mill-ġdid minħabba huwa importanti li,
a pointer huwa xejn aktar minn indirizz.
Pointers huma tindirizza lill-postijiet fil-memorja fejn varjabbli jgħixu.
Jafu li din issir nittamaw ftit aktar faċli li taħdem magħhom.
Ħaġa oħra I simili tagħmel huwa li jkollhom sort
ta 'dijagrammi viżwalment jirrappreżenta x'hemm jiġri mal-linji differenti ta 'kodiċi.
U aħna ser nagħmlu dan koppja ta 'drabi fil pointers,
u meta nitkellmu dwar dinamiku allokazzjoni memorja kif ukoll.
Għaliex naħseb li dawn dijagrammi jista 'jkun partikolarment utli.
>> Mela jekk jien ngħid per eżempju, int k fil-kodiċi tiegħi, dak li qed jiġri?
Ukoll dak li bażikament jiġri huwa Jien jkollna memorja mwarrba għalija,
imma jien ma anki simili li taħseb dwarha bħal dik, I
simili biex jaħsbu dwar dan bħal kaxxa.
I jkollhom kaxxa u huwa aħdar kkulurita għaliex I
tista 'tpoġġi numri interi fil-kaxxi ħodor.
Jekk kien karattru I jista 'jkollhom kaxxa blu.
Imma jien dejjem ngħid, jekk jien ħolqien kaxxa li tista 'żżomm interi
li l-kaxxa hija kkulurita aħdar.
U jien tieħu immarkar permanenti u nikteb k fuq in-naħa ta 'dan.
So I jkollhom kaxxa msejħa k, li fih I tista 'tpoġġi interi.
Allura meta I say int k, li dak li jiġri fir-ras tiegħi.
Jekk ngħid k ugwali ħamsa, dak am I tagħmel?
Well, jien tqegħid ħamsa fil-kaxxa, id-dritt.
Dan huwa pjuttost sempliċi, jekk I say int k, joħolqu kaxxa msejħa k.
Jekk ngħid k ugwali 5, jitqiegħdu ħamsa fil-kaxxa.
Nisperaw li mhux wisq ta 'qabża.
Hawn fejn l-affarijiet imorru a ftit interessanti għalkemm.
Jekk ngħid int * pk, sew anke jekk jien ma jafu liema dan neċessarjament ifisser,
huwa ltqajna xi ħaġa b'mod ċar li tagħmel ma 'numru sħiħ.
Hekk jien ser kulur din il-kaxxa ħadra ish,
Naf huwa ltqajna xi ħaġa li tagħmel ma 'numru sħiħ,
iżda mhux numru sħiħ innifsu, għaliex dan huwa star int.
Hemm xi ħaġa kemmxejn differenti dwar dan.
Hekk involuti s integer, iżda altrimenti huwa
mhux wisq differenti minn dak li konna nitkellmu.
Huwa kaxxa, tagħha ltqajna tikketta, huwa liebes pk tikketta,
u huwa kapaċi holding stilla Int, ikun x'ikun dawk huma.
Huma għandhom xi ħaġa li tagħmel ma interi, b'mod ċar.
Hawn l-aħħar linja għalkemm.
Jekk ngħid pk = & k, Whoa, dak li ġara biss, id-dritt?
Allura dan in-numru bl-addoċċ, apparentement każwali numru, gets jintefa 'fil-kaxxa hemmhekk.
Dak kollu li huwa, huwa pk gets-indirizz ta 'k.
Hekk jien teħel fejn k jgħix fil-memorja, indirizz tagħha,-indirizz ta 'bytes tagħha.
All qed nagħmel huwa jien qal li valur huwa dak li jien ser
li jitqiegħdu ġewwa tal-kaxxa msejħa pk tiegħi.
U minħabba dawn l-affarijiet huma pointers, u minħabba tħares
fi string bħal żero x tmienja żero c seba erba tmienja
tnejn żero huwa probabbilment m'għandux sinifikat kbir.
Meta aħna ġeneralment Ħares pointers, aħna fil-fatt jagħmlu dan bħala pointers.
Pk tagħtina l-informazzjoni għandna bżonn issib k fil-memorja.
Allura bażikament pk għandha vleġġa fiha.
U jekk aħna mixja it-tul ta 'dak vleġġa, jimmaġina
huwa xi ħaġa inti tista 'timxi fuq, jekk aħna jimxu tul it-tul tal-vleġġa,
fil-ponta ħafna ta 'dak vleġġa, aħna issib il-post fil-memorja
fejn k jgħix.
U li verament importanti minħabba li ladarba nafu fejn k jgħix,
nistgħu tibda taħdem mal-data ġewwa tal f'dak il-post memorja.
Għalkemm aħna qed jkollna teeny daqsxejn quddiem ta 'ruħna għal issa.
>> Allura dak li huwa pointer?
A pointer huwa oġġett data li valur huwa indirizz tal-memorja.
Dan kien li żero x tmien Jittieħed żero għaddej, li kienet l-indirizz tal-memorja.
Dan kien post fil-memorja.
U t-tip ta 'pointer jiddeskrivi t-tip
ta 'data inti ser issib fuq dak l-indirizz memorja.
Allura hemm il-lemin parti istilla int.
Jekk nimxi li vleġġa, huwa ser iwasslu lili għal post.
U f'dak il-post, dak I se ssib hemm fl-eżempju tiegħi,
huwa kaxxa kkulurita aħdar.
Huwa ta 'numru sħiħ, dan huwa dak I issib jekk immur f'dak l-indirizz.
Dejta tat-tip ta ' pointer jiddeskrivi liema
inti ser issib f'dak l-indirizz tal-memorja.
Allura hawnhekk-ħaġa verament jibred għalkemm.
Pointers inessu jgħaddu varjabbli bejn funzjonijiet.
U fil-fatt jgħaddu varjabbli u ma jgħaddu kopji tagħhom.
Għaliex jekk nafu eżattament fejn fil-memorja biex isibu varjabbli,
ma kellniex bżonn biex jagħmel kopja ta ' dan, nistgħu biss mur f'dak il-post
u taħdem ma 'dak varjabbli.
Għalhekk, essenzjalment pointers sort ta tagħmel ambjent kompjuter
ħafna aktar bħall-dinja reali, id-dritt.
>> Allura hawnhekk analoġija.
Ejja ngħidu li għandi notebook, dritt, u huwa sħiħa ta 'noti.
U nixtieq li inti jaġġornah.
Inti funzjoni li aġġornamenti jinnota, id-dritt.
Fil-mod aħna kont qed taħdem s'issa, liema
jiġri huwa inti se tieħu notebook tiegħi, inti ser tmur għall-maħżen kopja,
inti ser tagħmel kopja Xerox ta kull paġna tal-notebook.
Int ser ikollok tħalli notebook tiegħi lura fuq l-iskrivanija tiegħi meta qed isir,
inti ser tmur u jaqsmu l-affarijiet fil tiegħi notebook li huma skaduti jew żbaljati,
u allura inti ser tgħaddi lura lill me-munzell ta 'paġni Xerox
li huwa r-replika ta 'notebook tiegħi ma il-bidliet li inti ħadna lilu.
U f'dak il-punt, huwa sa lili bħala il-funzjoni li ssejjaħ, bħala l-sejjieħ,
biex jiddeċiedu li jieħdu noti tiegħek u jintegrawhom lura fis notebook tiegħi.
Allura hemm ħafna ta 'passi involuti hawnhekk, id-dritt.
Bħal ma kienx ikun aħjar jekk I biss jgħidu, ħej, inti tista
aġġornament notebook tiegħi għal me, inti idejn notebook tiegħi,
u tieħu affarijiet u litteralment jaqsmu lilhom out
u taġġorna noti tiegħi fil notebook tiegħi.
U mbagħad tagħti me notebook tiegħi lura.
Dak it-tip ta 'dak pointers inessu li tagħmel,
dawn jagħmlu dan l-ambjent ħafna aktar simili kif noperaw fir-realtà.
>> Dritt kollha hekk dan huwa dak pointer huwa, ejja nitkellmu
dwar kif pointers jaħdmu C, u kif nistgħu tibda taħdem magħhom.
Allura hemm pointer sempliċi ħafna C imsejjaħ il-pointer null.
Il-punti pointer nulla sa xejn.
Dan probabbilment tidher qisha huwa fil-fatt mhux xi ħaġa utli ħafna,
imma kif aħna ser tara ftit aktar tard, il-fatt
li jeżisti dan il-werrej null fil-fatt verament jista 'jidħol fil handy.
U kull meta inti toħloq pointer, u inti ma jistabbilixxu immediately- valur tagħha
eżempju tat-twaqqif valur tiegħu immedjatament
se jkun slides koppja lura fejn I said pk ugwali & k,
pk gets indirizz k, kif Ser naraw dak li tfisser,
Ser naraw kif kodiċi li shortly- jekk aħna ma jistabbilixxu valur tagħha għal xi ħaġa
sinifikanti immedjatament, għandek dejjem
sett pointer tiegħek għall-punt li nulla.
Għandek tissettja għall-punt li xejn.
>> Li l differenti ħafna minn biss li jħallu l-valur kif inhi
u għaldaqstant iddikjarat a pointer u biss jekk wieħed jassumi
huwa null minħabba li rarament veru.
Allura għandek dejjem stabbiliti il-valur ta 'pointer
biex null jekk inti ma jistabbilixxu l-valur tagħha għal xi ħaġa sinifikanti immedjatament.
Tista 'tiċċekkja jekk il-valur ta' pointer s huwa null użu l-operatur ugwaljanza
(==), Bħad inti tqabbel kull numru sħiħ valuri jew il-valuri karattru li jużaw (==)
kif ukoll.
Huwa tip speċjali ta 'kostanti valur li tista 'tuża biex tittestja.
Allura li kien sempliċi ħafna pointer, il pointer null.
Mod ieħor biex joħolqu a pointer huwa li estratt
l-indirizz ta 'varjabbli inti stajt diġà maħluqa,
u inti tagħmel dan bl-użu & estrazzjoni indirizz operatur.
Li konna diġà raw qabel fl-ewwel eżempju dijagramma I wera.
Mela jekk x huwa varjabbli li konna diġà ħoloq tal numru sħiħ it-tip,
allura & x hija pointer għal numru sħiħ.
& x is- tiftakar, u se estratt l-indirizz tal-ħaġa fuq il-lemin.
U peress pointer huwa biss l-indirizz, minn & x hija pointer għal numru sħiħ
valur tagħhom huwa fejn fil-ħajja memorja x.
Huwa indirizz x s.
Allura & x huwa l-indirizz ta 'x.
Ejja tieħu dan il-pass wieħed aktar u qabbad għal xi ħaġa
I allużjoni għall fil-video qabel.
Jekk arr firxa ta jirdoppja, allura & bracket kwadru arr i huwa pointer
għal sistema.
KOLLOX SEW.
arr parentesi kwadri i, jekk arr firxa ta jirdoppja,
imbagħad arr bracket kwadru i huwa l-element numru i ta 'dak array,
u & arr bracket kwadru i huwa fejn fil l-element numru i tal arr jeżisti memorja.
>> Allura x'inhu l-implikazzjoni hawn?
Isem arrays, l-implikazzjoni ta 'dan il-ħaġa sħiħa,
huwa li l-isem ta 'firxa hija fil-fatt fih innifsu pointer.
You ħadthom ilhom jaħdmu ma pointers kollha flimkien
kull darba li inti stajt użati firxa.
Ftakar mill-eżempju dwar l-ambitu varjabbli,
qrib it-tmiem tal-video I preżenti eżempju fejn għandna funzjoni
imsejħa int sett u funzjoni imsejħa sett firxa.
U l-isfida tiegħek biex jiddeterminaw jekk le, jew dak il-
valuri li aħna stampati l-aħħar tal-funzjoni,
fl-aħħar tal-programm prinċipali.
>> Jekk inti recall minn dan leżempju jew jekk inti stajt jaraw l-video,
inti taf li meta lilek--sejħa għall int sett effettivament ma xejn.
Iżda l-sejħa biex jistabbilixxu firxa ma.
U jien tip ta 'glossed fuq għaliex li kien il-każ fiż-żmien.
I biss qal, ukoll huwa firxa, huwa speċjali, inti taf, hemm raġuni.
Ir-raġuni hija li l-firxa isem huwa verament ftit pointer,
u hemm dan speċjali sintassi bracket kwadru li
tagħmel affarijiet ħafna nicer li jaħdmu magħhom.
U huma jagħmlu l-idea ta ' pointer ħafna inqas intimidanti,
u hu għalhekk dawn qed tip ta ppreżentati b'dan il-mod.
Imma verament arrays huma biss pointers.
U hu għalhekk li meta aħna għamlu bidla lill-firxa,
meta aħna għadda firxa bħala parametru għal funzjoni jew bħala argument
għal funzjoni, il-kontenut tal-firxa fatt inbidlu kemm l callee
u fil-sejjieħ.
Li għal kull tip ieħor ta ' varjabbli rajna ma kienx il-każ.
Allura dan huwa biss xi ħaġa li wieħed iżomm f'moħħna meta inti qed jaħdmu ma 'pointers,
huwa li l-isem ta ' firxa attwalment pointer
l-ewwel element ta 'dik array.
>> OK hekk issa għandna dawn kollha fatti, ejja jibqgħu għaddejjin, id-dritt.
Għaliex we care about fejn xi ħaġa jgħix.
Well bħal I said, huwa pjuttost utli li tkun taf fejn xi ħaġa jgħix
sabiex inti tista 'tmur hemm u jibdlu.
Jaħdmu magħha u fil-fatt jkollhom il-ħaġa li inti
trid tagħmel għal dak iseħħu varjabbli, u m'għandhiex ikollha effett fuq xi kopja ta 'dan.
Din tissejjaħ dereferencing.
Immorru-referenza u aħna jibdlu l-valur hemmhekk.
Mela jekk ikollna pointer u huwa msejjaħ pc, u hija tirreferi għall karattru,
allura nistgħu ngħidu * pc u * pc huwa l- isem ta 'dak li aħna ser issib jekk immorru
fl-indirizz pc.
Dak li ser issib hemm karattru u * pc huwa kif aħna nirreferi għad-dejta f'dak
post.
Allura nistgħu ngħidu xi ħaġa bħal * pc = D jew xi ħaġa bħal dik,
u dan ifisser li kwalunkwe kien fl-indirizz tal-memorja pc,
ikun x'ikun karattru kien preċedentement hemm, issa huwa D, jekk ngħidu * pc = D.
>> So here we go darb'oħra ma xi għalf C stramb, id-dritt.
Allura aħna stajt tidher * preċedentement bħala b'xi parti mit-tip tad-data,
u issa huwa qed jintuża fil F'kuntest xi ftit differenti
aċċess għad-data fil-post.
Naf huwa ftit konfuża u li fil-fatt parti minn dan kollu
simili, għaliex pointers jkollhom din mitoloġija madwarhom bħala li tkun b'hekk kumplessi,
huwa tip ta 'problema sintassi, onestament.
Iżda * huwa użat fiż-żewġ kuntesti, kemm bħala parti mill-isem tat-tip,
u aħna ser tara ftit xi ħaġa aktar tard oħra, wisq.
U d-dritt issa huwa l- operatur dereference.
Għalhekk tmur għall-referenza, aċċessi l-informazzjoni
fil-post ta 'l-pointer, u jippermettilek li jimmanipulaw fil-se.
>> Issa dan huwa simili ħafna għal jżuru proxxmu tiegħek, id-dritt.
Jekk inti taf liema tiegħek proxxmu jgħix, int
mhux mdendlin mal-proxxmu tiegħek.
Inti taf li inti jiġri li jafu fejn jgħixu,
iżda dan ma jfissirx li mill minħabba li jkollu dak l-għarfien
inti jinteraġixxi magħhom.
Jekk inti tixtieq li jinteraġixxu magħhom, ikollok tmur għall-dar tagħhom,
ikollok tmur fejn jgħixu.
U ladarba inti tagħmel dan, allura inti tista jinteraġixxu
magħhom bħad youd tixtieq li.
U l-istess ma 'varjabbli, għandek bżonn biex tmur indirizz tagħhom
jekk inti tixtieq li jinteraġixxu magħhom, inti ma tistax biss taf l-indirizz.
U l-mod inti tmur għall-indirizz huwa għall-użu *, l-operatur dereference.
What do you think jiġri jekk nippruvaw u dereference
a pointer li l-valur huwa null?
Ifakkar li l-null pointer punti għal xejn.
Mela jekk inti tipprova u dereference xejn jew mur l xejn indirizz,
x'taħseb jiġri?
Segmentazzjoni Ukoll jekk inti guessed tort, youd tkun id-dritt.
Jekk inti tipprova u dereference a pointer null,
inti tbati segmentazzjoni tort. Imma stenna,
ma I jgħidlek, li jekk int mhux se
li jiġu stabbiliti valur tiegħek ta tiegħek pointer li xi ħaġa sinifikanti,
għandek stabbiliti biex null?
Jien għamilt u fil-fatt l-segmentazzjoni tort huwa tip ta 'mġieba tajba.
>> Qatt iddikjara varjabbli u mhux assenjat valur tiegħu immedjatament?
Allura inti biss jgħidu int x; inti ma attwalment tassenja lill xejn
u mbagħad aktar tard fil-kodiċi tiegħek, inti jistampa l-valur ta 'x,
peress li kien għadu ma assenjati lill xejn.
Spiss inti ser tingħata żero, imma xi kultant inti
tista 'tikseb xi numru bl-addoċċ, u għandek l-ebda idea fejn ġew minn.
Bl-istess mod tista affarijiet jiġri ma pointers.
Meta inti tiddikjara pointer int * pk per eżempju,
u inti ma tassenja lil xi valur, ikollok erba 'bytes għall-memorja.
Tkun xi tkun erba 'bytes ta' memorja tas-sistema jista '
issib li jkollhom xi valur sinifikanti.
U hemm seta 'kien xi ħaġa diġà hemmhekk li
m'għadhiex meħtieġa mill ieħor funzjoni, sabiex inti biss għandek
tkun xi tkun id-data kien hemm.
>> X'jiġri jekk inti ippruvaw jagħmlu dereference xi indirizz li inti don't- kien hemm
diġà bytes u informazzjoni hemm, li issa fil pointer tiegħek.
Jekk inti tipprova u dereference li pointer, inti tista 'tkun messing ma' xi memorja
li inti ma kellux intenzjoni mess mal dan kollu.
U fil-fatt inti tista 'tagħmel xi ħaġa verament devastanti,
bħal break programm ieħor, jew pawża funzjoni oħra,
jew tagħmel xi ħaġa malizzjużi li inti ma intenzjoni li jagħmlu fil-livelli kollha.
U hekk hu għalhekk huwa attwalment idea tajba
li jiġu stabbiliti pointers tiegħek biex null jekk inti ma jistabbilixxu lilhom għal xi ħaġa sinifikanti.
Huwa probabbilment aħjar fil- aħħar tal-ġurnata għal programm tiegħek
li jikkraxxja imbagħad biex tagħmel Xi ħaġa li viti up
programm ieħor jew funzjoni oħra.
Li l-imġieba hija probabbilment anki inqas ideali milli sempliċiment jiġġarrfu.
U hekk hu għalhekk huwa attwalment drawwa tajba
li jsibu rwieħhom biex jistabbilixxu pointers tiegħek biex null jekk inti ma jistabbilixxu lilhom
għal valur sinifikanti immedjatament, valur li inti taf
u li inti tista sikur l dereference.
>> Mela ejja terga 'lura issa u tagħti ħarsa fil-sintassi ġenerali tas-sitwazzjoni.
Jekk ngħid int * p ;, dak li I biss jsir?
What I ghamilt hija din.
Naf li l-valur ta 'p huwa indirizz minħabba pointers kollha huma biss
indirizzi.
I tista p dereference użu l-operatur *.
F'dan il-kuntest hawn, fil-ħafna top mfakkra l-* hija parti mit-tip.
Int * hija t-tip tad-data.
Imma nista 'dereference p tuża l-operatur *,
u jekk nagħmel hekk, jekk immur għal dak l-indirizz, dak li se nsib f'dak l-indirizz?
I ser issib numru sħiħ.
Allura int * p hija bażikament qal, p huwa indirizz.
I tista dereference p u jekk I do, I ser issib numru sħiħ
f'dak il-post memorja.
>> OK so I qal ma kien hemm ieħor Ħaġa annoying bl-istilel
u hawn fejn dak Ħaġa annoying bl-istilel huwa.
Qatt ppruvaw li tiddikjara varjabbli multipli tal-istess tip
fuq l-istess linja tal-kodiċi?
Allura għat-tieni, nippretendu li l-linja, il-kodiċi I attwalment jkollhom hemmhekk fl-aħdar
ma jkunx hemm u hija biss jgħid int x, y, z ;.
What li tagħmel huwa attwalment joħolqu tliet fatturi varjabbli numru sħiħ għalik,
wieħed imsejjaħ x, wieħed imsejjaħ y, u wieħed imsejjaħ z.
Huwa mod biex tagħmel dan mingħajr jkollhom maqsuma fuq tliet linji.
>> Hawn fejn istilel jiksbu annoying darb'oħra għalkemm,
minħabba li l-* huwa attwalment parti kemm tal-isem tip u parti
tal-isem varjabbli.
U hekk jekk ngħid int * px, py, PZ, dak I fil-fatt tikseb huwa pointer għal integer
imsejħa px u żewġ interi, PY u PZ.
U li probabbilment ma jkunx dak irridu, li mhux tajba.
>> Mela jekk jien tixtieq li toħloq pointers multipli fuq l-istess linja, tal-istess tip,
u l-istilel, dak I attwalment bżonn tagħmel hu jgħidu int * pa, * pb, * pc.
Issa wara li biss qal li u issa tghidlek dan,
inti probabilment qatt se tagħmel dan.
U huwa probabbilment ħaġa tajba onestament, għaliex inti tista involontarjament
jħalli barra stilla, xi ħaġa bħal dik.
Huwa probabbilment l-aħjar biex forsi tiddikjara pointers fuq linji individwali,
imma huwa biss wieħed ieħor ta 'dawk sintassi annoying
affarijiet ma stilla li jagħmlu pointers daqshekk diffiċli biex jaħdmu ma '.
Għaliex dan huwa biss dan sintattika mess inti għandek taħdem permezz.
Bil-prattika dan ma verament issir tieni natura.
I għadhom jagħmlu żbalji miegħu xorta wara ipprogrammar għal 10 snin,
sabiex ma jiġi mqalleb jekk jiġri xi ħaġa lilek, huwa pjuttost komuni onestament.
Huwa tassew tip ta difett tal-sintassi.
>> OK so I tip ta 'imwiegħda li aħna se tirrevedi
il-kunċett ta 'kemm tkun kbira hija sekwenza.
Ukoll jekk I qallek li spag, konna verament tip ta '
ġie tinsab għalik il-ħin kollu.
M'hemm l-ebda tip ta 'dejta msejħa spag, u fil-fatt I
imsemmi din f'wieħed mill tagħna videos kmieni dwar it-tipi ta 'data,
li string kienet tip data li inħoloq għalik fil CS50.h.
Int għandek #include CS50.h sabiex jużawh.
>> Ukoll string huwa verament ftit alias għal xi ħaġa
imsejjaħ il-char *, a pointer li karattru.
Well pointers, irtirar, huma biss tindirizza.
Allura x'inhu d-daqs fi bytes ta 'string?
Ukoll huwa erba 'jew tmien.
U r-raġuni I say erba 'jew tmienja huwa minħabba li attwalment
jiddependi fuq is-sistema, Jekk inti qed tuża Ide CS50, char * huwa d-daqs ta 'char
* Huwa tmienja, huwa sistema 64-bit.
Kull indirizz fil-memorja huwa 64 bits tul.
Jekk inti qed tuża apparat CS50 jew bl-użu kull magna 32-bit,
u inti widnejna dak it-terminu 32-bit magna, liema huwa magna 32-bit?
Ukoll dan ifisser biss li kull indirizz fil-memorja huwa 32 bits tul.
U għalhekk 32 bits huwa erba bytes.
Allura char * huwa erba 'jew tmien bytes skond is-sistema tiegħek.
U fil-fatt xi tipi ta 'data, u pointer għal kwalunkwe data
tip, peress li indikaturi kollha huma biss indirizzi, huma erba 'jew tmien bytes.
Mela ejja rriveduti dan dijagramma u ejja jikkonkludu
dan il-video ma eżerċizzju ftit hawn.
Allura hawnhekk-dijagramma aħna jitħalla 'off ma' fil-bidu nett tal-video.
Allura x'jiġri issa jekk ngħid * pk = 35?
Allura dak ma jfisser meta ngħidilhom, * PK = 35?
Tieħu t-tieni.
* pk.
Fil-kuntest hawn, * huwa operatur dereference.
Allura meta l-dereference operatur huwa użat,
immorru l-indirizz indikat billi pk, u nagħmlu l-bidla dak li nsibu.
Allura * pk = 35 effettivament ma dan għall-istampa.
Allura huwa bażikament sintattikament identika għal ta 'wara li qal k = 35.
>> Wieħed aktar.
Jekk ngħid int m, I joħolqu varjabbli ġdida msejħa m.
A kaxxa ġdida, huwa kaxxa ħadra għaliex li għaddej biex iżommu numru sħiħ,
u huwa ttikkettjat m.
Jekk ngħid m = 4, I tpoġġi numru sħiħ f'dak kaxxa.
Jekk ngħidu aħna pk = & m, kif ma din il-bidla dijagramma?
Pk = & m, do inti recall dak l- & Operatur ma jew tissejjaħ?
Ftakar li & xi isem varjabbli huwa l-indirizz ta 'isem varjabbli.
Allura dak li aħna qed tgħid huwa pk gets-indirizz ta 'm.
U hekk effettivament x'jiġri l- dijagramma huwa li PK punti m'għadux
k iżda żviluppi li m.
>> Għal darb'oħra pointers huma ħafna delikata biex jaħdmu ma
u li jieħdu ħafna ta ' prattika, iżda minħabba
tal-kapaċità tagħhom biex jippermettu li inti jgħaddu data bejn funzjonijiet
u fil-fatt ikollhom dawk bidliet jidħlu fis-seħħ,
jkollna ras tiegħek madwar huwa verament importanti.
Huwa probabbilment l-aktar kumplikata suġġett niddiskutu fil CS50,
iżda l-valur li inti jiksbu milli jużaw pointers
sakemm jisboq l-kumplikazzjonijiet li jiġu mit-tagħlim minnhom.
So I jixtiequ inti l-aħjar ta ' Xorti tagħlim dwar pointers.
Jien Doug Lloyd, dan huwa CS50.