[Powered by Google Translate] [4 વિભાગ - વધુ અનુકૂળ] [રોબ બોડેન - હાર્વર્ડ યુનિવર્સિટી] [આ CS50 છે. - CS50.TV] અમે એક ક્વિઝ કાલે હોય તેવા કિસ્સાઓમાં, તમે ગાય્સ કે ખબર ન હતી. તે બધું તમે વર્ગ જોવા હોઈ શકે છે અથવા વર્ગ માં જોઇ હોવી જોઇએ પર મૂળભૂત છે. કે પોઇંટરો સમાવેશ થાય છે, તેમ છતાં તેઓ ખૂબ જ તાજેતરનું વિષય છો. તમે ઓછામાં ઓછું તેમને ઊંચા સ્તરો સમજવા જોઈએ. જે કંઇ પણ ઉપર વર્ગ ઇનમાં આવ્યું હોય તો તમે ક્વિઝ માટે સમજવા જોઈએ. તેથી જો તમે તેમના પર પ્રશ્નો હોય, તો તમે તેમને હવે પૂછી શકો છો. પરંતુ આ એક વિદ્યાર્થી આગેવાની ખૂબ સત્ર પ્રયત્ન રહ્યું છે જ્યાં તમે ગાય્સ પ્રશ્નો પૂછી, જેથી આસ્થાપૂર્વક લોકો પ્રશ્નો હોય છે. શું કોઇને પ્રશ્નો છે? હા. >> [વિદ્યાર્થી] તમે પોઇન્ટર પર જાઓ શકું ફરી? હું પોઇન્ટર પર જાઓ પડશે. તમારા ચલો બધા જરૂરી મેમરી રહે છે, પરંતુ સામાન્ય રીતે તમે તે વિશે ચિંતા નથી અને તમે માત્ર કહેવું એક્સ અને વાય + 2 + 3 અને કમ્પાઇલર બહાર આકૃતિ જ્યાં તમને જે વસ્તુઓ માટે રહેતા હોય. એકવાર તમે પોઇન્ટર સાથે વ્યવહાર કરી રહ્યા છો, હવે તમે નિશ્ચિતપણે તે મેમરી સરનામાઓ વાપરી રહ્યા છો. તેથી એક ચલ માત્ર ક્યારેય કોઈપણ સમયે એક સરનામા પર લાઇવ થશે. જો આપણે એક નિર્દેશક જાહેર કરવા માંગો છો, પ્રકાર શું જેમ દેખાય રહ્યું છે? હું એક નિર્દેશક પૃષ્ઠ જાહેર કરવા માંગો છો. પ્રકાર શું લાગતું નથી? [વિદ્યાર્થી] પૂર્ણાંક * પી. >> યાહ. તેથી પૂર્ણાંક * પી. અને હું કેવી રીતે કરી શકું તે માટે એક્સ નિર્દેશ? >> [વિદ્યાર્થી] & "અને" નું ચિહ્ન. [બોડેન] તેથી & "અને" નું ચિહ્ન શાબ્દિક ઓપરેટર ઓફ સરનામા કહેવામાં આવે છે. તેથી જ્યારે હું કહું છું અને એક્સ તે ચલ x ની મેમરી સરનામું મેળવવામાં છે. તેથી હવે હું નિર્દેશક પૃષ્ઠ હોય છે, અને ગમે ત્યાં મારા કોડ માં હું * પૃષ્ઠ ઉપયોગ કરી શકો છો અથવા હું એક્સ વાપરો અને તેને ચોક્કસ જ વાત હશે શકે છે. (પાનું *). આ શું કરે છે? કે તારો શું અર્થ છે? [વિદ્યાર્થી] તે સમયે કિંમત થાય છે. >> યાહ. તેથી જો અમે તેને જોવા, તે ખૂબ જ ઉપયોગી હોઈ માટે બહાર આકૃતિઓ દોરવા કરી શકો છો જ્યાં આ એક્સ માટે મેમરી નાના બોક્સમાં છે, કે જે 4 મૂલ્ય ધરાવે થાય છે છે, તો પછી અમે પૃષ્ઠ માટે મેમરી નાના બોક્સમાં હોય છે, અને તેથી એક્સ માટે પૃષ્ઠ પોઇન્ટ, તેથી અમે પૃષ્ઠ થી x એક તીર દોરે છે. તેથી જ્યારે અમે કહીએ છીએ * પૃષ્ઠ અમે કહી રહ્યાં છે તે બોક્સ કે જે પૃષ્ઠ છે જાઓ. નક્ષત્ર તીર અનુસરો છે અને પછી ગમે તમે નથી કે બોક્સ સાથે ત્યાજ કરવા માંગો છો. તેથી હું * 7 = પૃષ્ઠ કહેવું શકે છે; અને તે બોક્સમાં કે જે x અને તે 7 થી ફેરફાર છે જશે. અથવા હું કહી શકે પૂર્ણાંક z = * 2 * પૃષ્ઠ; તે ચિંતામાં મૂકી દે છે કારણ કે તે તારો તારો. એક તારો પૃષ્ઠ dereferencing છે, અન્ય સ્ટાર 2 દ્વારા ગુણાકાર છે. નોંધ હું કરી શકે છે માત્ર તેમજ એક્સ સાથે * પૃષ્ઠ લીધું. તમે તેમને તે જ રીતે ઉપયોગ કરી શકો છો. અને પછી હું પાછળથી એક સંપૂર્ણપણે નવી વસ્તુ પૃષ્ઠ બિંદુ હોય શકે છે. મેં હમણાં જ કહી શકો પૃષ્ઠ = &z; તેથી હવે એક્સ માટે લાંબા સમય સુધી બિંદુઓ પી; તે z નિર્દેશ કરે છે. અને કોઈપણ સમયે હું * પૃષ્ઠ કરવું તે z કરી જેવી જ છે. તેથી આ વિશે ઉપયોગી વસ્તુ એક વખત અમે વિધેયો માં મેળવવાનું શરૂ. તે નકામી પ્રકારની કરવા માટે એક નિર્દેશક કે પોઇન્ટ જાહેર કંઈક કરવા માટે અને પછી તમે તેને dereferencing કરી રહ્યાં છો જ્યારે તમે મૂળ ચલ ઉપયોગ કરી શકે સાથે શરૂ થાય છે. પરંતુ જ્યારે તમે વિધેયો પ્રવેશ મેળવવા - તેથી આપણે કહેવું અમે કેટલીક કાર્ય, પૂર્ણાંક foo હોય છે, કે જે નિર્દેશક લે છે અને માત્ર * પેજ 6 = કરે છે; જેમ અમે સ્વેપ સાથે પહેલાં થયો હતો, તમે એક અસરકારક સ્વેપ અને એક અલગ કાર્ય ન કરી શકો માત્ર પૂર્ણાંકો પસાર કારણ કે સી બધું હંમેશા કિંમત દ્વારા પસાર છે. ત્યારે પણ તમે પોઇંટરો પસાર કરી રહ્યાં છો તમે કિંમત દ્વારા પસાર કરી રહ્યાં છે. તે જ બને છે કે તે કિંમતો મેમરી સરનામાંઓ છે. તેથી હું કહું છું કે જ્યારે (પી) foo; હું કાર્ય foo માં નિર્દેશક પસાર છું અને પછી foo * 6 = પૃષ્ઠ કરી છે; જેથી અંદર કે કાર્ય છે, * પૃષ્ઠ હજી પણ એક્સ સમકક્ષ, પરંતુ હું એક્સ કે કાર્ય ની અંદર ઉપયોગ નથી કારણ કે તે કાર્ય અંદર scoped નથી કરી શકો છો. તેથી * પૃષ્ઠ = 6 એકમાત્ર રસ્તો હું અન્ય કાર્ય એક સ્થાનિક ચલ ઍક્સેસ કરી શકે છે. અથવા, પણ પોઇંટરો એકમાત્ર રસ્તો હું અન્ય કાર્ય એક સ્થાનિક ચલ ઍક્સેસ કરી શકો છો. [વિદ્યાર્થી] લેટ્સ કહો કે તમે એક નિર્દેશક પરત માગતા હતા. બરાબર તમે કેવી રીતે કરો કે તમે શું કરશો? [બોડેન] પૂર્ણાંક વાય = 3 કંઈક માં એક નિર્દેશક વળતર; અને વળતર વાય? >> [વિદ્યાર્થી] યાહ. [બોડેન] ઠીક. તમે આ ક્યારેય કરવું જોઈએ. આ ખરાબ છે. મને લાગે છે કે હું આ વ્યાખ્યાન સ્લાઇડ્સ માં જોયું તમે મેમરી આ સમગ્ર રેખાકૃતિ જોયા શરૂ અહીં તમે જ્યાં મેમરી સરનામા 0 મળી છે અને નીચે અહીં તમે મેમરી સરનામા 4 શોના 32 માટે અથવા 2 છે. તેથી પછી તમે અમુક સામગ્રી અને કેટલીક સામગ્રી મળી છે અને તે પછી તમે તમારા સ્ટેક છે અને તમે તમારા ઢગલો છે, કે જે તમે હમણાં વિશે જાણવામાં, અપ વધતી શરૂ મેળવ્યા છે. [વિદ્યાર્થી] સ્ટેક ઉપર ઢગલો નથી? યાહ. આ ઢગલો ટોચ પર છે, તે નથી? >> [વિદ્યાર્થી] વેલ, તે ટોચ પર 0 મૂકો. [વિદ્યાર્થી] ઓહ, તે ટોચ પર 0 મૂકો. >> [વિદ્યાર્થી] ઓહ, ઠીક છે. ડિસક્લેમર: ગમે ત્યાં CS50 સાથે તમે તેને આ રીતે જોઈ રહ્યા છીએ. >> [વિદ્યાર્થી] ઠીક. તે માત્ર કે જ્યારે તમે પ્રથમ રન ટાઇમ સ્ટેકનું જોઈ રહ્યાં છો, ગમે છે જ્યારે તમે એક સ્ટેક તમે એક બીજા ઉપર વસ્તુઓ સ્ટેકીંગ લાગે છે લાગે છે. તેથી અમે આસપાસ આ વિમાનની મુસાફરી જેથી સ્ટેક એક સ્ટેક સામાન્ય રીતે જેમ વધતી જાય છે વલણ ધરાવે છે બદલે સ્ટેક નીચે ફાંસી. >> [વિદ્યાર્થી] નહિં heaps તકનીકી અપ પણ વૃદ્ધિ છતાં? તે તમને શું અર્થ દ્વારા ઉછેર પર આધાર રાખે છે. આ સ્ટેક અને ઢગલો હંમેશા વિરુદ્ધ દિશામાં વિકસે છે. એક સ્ટેક હંમેશા અર્થમાં છે વૃદ્ધિ પામતા કે તે વધતી જતી છે નોંધાયો ઉચ્ચ મેમરી સરનામાંઓ, અને ઢગલો નીચે વધી રહી છે કે જેમાં તે નીચા મેમરી સરનામાંઓ પર કોઈ રન નોંધાયો વધતી રહી છે. તેથી ઉપરની 0 છે અને નીચે ઉચ્ચ મેમરી સરનામાંઓ છે. તેઓ બંને દિશામાં વિરોધ ફક્ત વધતી જતી કરી રહ્યાં છો. [વિદ્યાર્થી] હું માત્ર કે અર્થ થાય છે કારણ કે તમે કહ્યું તમે તળિયે સ્ટેક મૂકી કારણ કે તે વધુ લાગે છે કારણ કે સ્ટેક માટે ઢગલો ટોચ પર શરૂ કરવા માટે, ઢગલો પોતાની ટોચ પર પણ છે, તેથી that's - >> યાહ. તમે પણ વધતી જતી અને વિશાળ તરીકે ઢગલો લાગે છે, પરંતુ સ્ટેક વધુ રહે છે. તેથી સ્ટેક એક કે અમે પ્રકારની સુધી વધતી બતાવવા માંગો છો. પરંતુ સર્વત્ર તમે અન્યથા જોવા ટોચ પર 0 સરનામા બતાવવા રહ્યું છે અને સૌથી વધુ તળિયે મેમરી સરનામું, તેથી આ તમારી મેમરી સામાન્ય દેખાવ છે. શું તમે એક પ્રશ્ન છે? [વિદ્યાર્થી] તમે અમને ઢગલો વિશે વધુ કહી શકે છે? યાહ. હું બીજા કે મળશે. પ્રથમ, શા માટે વાય અને પરત ફર્યા પાછા જવાનું ખરાબ વસ્તુ છે, સ્ટેક પર તમે સ્ટેક ફ્રેમ્સ જે બધા વિધેયોને પ્રતિનિધિત્વ સમૂહ છે જે કહેવાય કરવામાં આવી છે. અગાઉના વસ્તુઓ અવગણીને, જેથી તમારા સ્ટેક ટોચ હંમેશા મુખ્ય કાર્ય પ્રયત્ન રહ્યું છે કારણ કે પ્રથમ કાર્ય કે કહેવાય રહ્યું છે તે છે. અને પછી જ્યારે તમે બીજા કાર્ય કૉલ, સ્ટેક નીચે વિકસે રહ્યું છે. , તેથી જો હું અમુક કાર્ય, foo, કૉલ અને તેની પોતાની સ્ટેક ફ્રેમ નહીં કેટલાક કાર્ય બાર, કૉલ કરી શકો છો; તેની પોતાની સ્ટેક ફ્રેમ નોંધાયો નહીં. અને ફરી યાદ આવવું બાર છે અને તેની પોતે કહી શકે, અને જેથી બાર બીજા કોલ પોતાના સ્ટેક ફ્રેમ વિચાર રહ્યું છે. અને તેથી શું આ સ્ટેક ફ્રેમમાં જાય સ્થાનિક ચલો બધા છે અને કાર્ય દલીલો કે બધા - કોઈપણ વસ્તુઓ છે કે જે સ્થાનિક રીતે આ કાર્ય માટે scoped છે આ સ્ટેક ફ્રેમમાં જાઓ. તેથી તેનો અર્થ એ કે જ્યારે હું જણાવ્યું હતું કે બાર કંઈક કામગીરી છે, હું માત્ર એક પૂર્ણાંક જાહેર અને પછી તે પૂર્ણાંક એક નિર્દેશક પાછા જઈ રહ્યો છું. તેથી જ્યાં વાય રહેતા નથી? [વિદ્યાર્થી] વાય પટ્ટીમાં રહે છે. >> [બોડેન] યાહ. ક્યાંક મેમરી આ થોડું ચોરસ એક littler ચોરસ કે તેને વાય છે. જ્યારે હું પાછો & પિ, હું મેમરી આ થોડું બ્લોક કરવા માટે નિર્દેશક પરત છું. પરંતુ પછી જ્યારે કાર્ય વળતર, તેના સ્ટેક ફ્રેમ બોલ સ્ટેક પોપ નહીં. અને તેથી જ તે સ્ટેક કહેવાય છે. તે સ્ટેક માહિતી બંધારણ જેવું છે, જો તમને ખબર હોય કે શું છે. અથવા ટ્રે એક સ્ટેક જેવા પણ હંમેશા ઉદાહરણ છે, મુખ્ય તળિયે જઇ રહ્યું છે, પછી પ્રથમ કાર્ય તમે કૉલ કરવા માટે કે શીર્ષ પર જાઓ રહ્યું છે, અને તમે પાછા મુખ્ય ન મળી ત્યાં સુધી તમે બધા વિધેયો કે જે કહેવામાં આવે છે કરેલી પાછા આવી શકો છો કે તે ટોચ પર મૂકવામાં આવ્યા છે. [વિદ્યાર્થી] તેથી જો તમે કર્યું & પિ છે, કે જે કિંમત નોટિસ વિના બદલવા માટે વિષય છે આવો. હા, it's - >> [વિદ્યાર્થી] તે ફરીથી લખાઈ હોઈ શકે છે. >> યાહ. તે સંપૂર્ણપણે છે - જો તમે પ્રયાસ કરો અને - આ પણ પૂર્ણાંક * બાર કારણ કે તે એક નિર્દેશક પરત છે કરશે, તેથી તેના વળતર પ્રકાર પૂર્ણાંક * છે. જો તમે આ કાર્ય પરત કિંમત ઉપયોગ કરવાનો પ્રયાસ કરો, તે અવ્યાખ્યાયિત વર્તન છે કારણ કે નિર્દેશક ખરાબ મેમરી નિર્દેશ કરે છે. >> [વિદ્યાર્થી] ઠીક. તેથી જો, ઉદાહરણ તરીકે, તમે જાહેર પૂર્ણાંક * વાય = malloc ((પૂર્ણાંક) sizeof)? કે વધારે છે. હા. [વિદ્યાર્થી] અમે કેવી રીતે વિશે વાત કરી ત્યારે અમે અમારી રીસાઇકલ બિન વસ્તુઓ ખેંચો તેઓ ખરેખર નથી ભૂંસી રહ્યાં છો; અમે ફક્ત તેમના પોઇંટરો ગુમાવી બેસે છે. તેથી આ કિસ્સામાં અમે ખરેખર તો કિંમત ભૂંસવું અથવા તે મેમરી હજુ પણ ત્યાં જ છો? સૌથી મોટા ભાગ માટે, તે હજુ પણ ત્યાં જ હશે. પરંતુ આપણે કહેવું અમે કેટલાક અન્ય કાર્ય, baz કૉલ થાય છે. Baz અહીં પર તેની પોતાની સ્ટેક ફ્રેમ વિચાર રહ્યું છે. તે આ સામગ્રી બધી ફરીથી લખી શકાય ચાલી રહ્યું છે, અને પછી જો તમે પછીથી પ્રયાસ કરો અને નિર્દેશક છે કે તમે પહેલાં મળી વાપરવા માટે, તે જ કિંમત નથી ચાલી રહ્યું છે. તે માત્ર બદલાયેલ છે કારણ કે તમે કાર્ય baz કહેવાય રહ્યું છે. [વિદ્યાર્થી] પરંતુ અમે અમે ન હો, હજુ 3 મળી શકે? [બોડેન] તમામ શક્યતા, તમે છો. પરંતુ તમે તે પર આધાર રાખતા નથી કરી શકો છો. સી ફક્ત અવ્યાખ્યાયિત વર્તન કહે છે. [વિદ્યાર્થી] ઓહ, તે કરે છે. ઠીક છે. તેથી જ્યારે તમે પાછા નિર્દેશક કરવા માંગો છો, તો આ છે જ્યાં malloc ઉપયોગ કરવામાં આવે છે. હું ખરેખર લખવા છું ફક્ત malloc પાછા (3 * sizeof (પૂર્ણાંક)). અમે malloc પર વધુ એક બીજા પડશે જાઓ, પરંતુ malloc વિચાર છે તમારા સ્થાનિક ચલો તમામ હંમેશા સ્ટેક પર જાઓ. જે કંઇ પણ malloced છે તે ઢગલો પર કોઈ રન નોંધાયો નહીં, અને તે કાયમ માટે અને હંમેશા ઢગલો પર હશે જ્યાં સુધી તમે તેને બાહ્ય રીતે મુક્ત. તેથી આ અર્થ એ છે કે જ્યારે તમે કંઈક malloc, તે કાર્ય વળતર બાદ ટકી રહેવા ચાલી રહ્યું છે. [વિદ્યાર્થી] તે પછી કાર્યક્રમ ચાલી સ્ટોપ્સ અસ્તિત્વ ટકાવી શકશે? >> નંબર ઠીક છે, તેથી તેને ત્યાં સુધી આ કાર્યક્રમ છે કે જે બધા માર્ગ ચાલી કરવામાં બનશે. હા. >> અમે ઉપર શું થાય છે જ્યારે કાર્યક્રમ ચાલી સ્ટોપ્સ વિગતો જઈ શકે છે. તમે મને યાદ કરવાની જરૂર છે, પરંતુ શકે છે કે જે અલગ વસ્તુ રાખે છે. [વિદ્યાર્થી] તેથી malloc એક નિર્દેશક બનાવે છે? >> યાહ. Malloc - >> [વિદ્યાર્થી] મને લાગે છે malloc મેમરી કે જે નિર્દેશક ઉપયોગ કરી શકો છો એક બ્લોક નિરૂપણ કરે છે. [બોડેન] હું કે રેખાકૃતિ ફરીથી કરવા માંગો છો. >> [વિદ્યાર્થી] તેથી આ કાર્ય કામ કરે છે, જોકે? [વિદ્યાર્થી] યાહ malloc મેમરી બ્લોક કે જે તમે ઉપયોગ કરી શકો છો નિરૂપણ, અને પછી તે મેમરી પ્રથમ બ્લોક ના સરનામા આપે છે. [બોડેન] યાહ. તેથી જ્યારે તમે malloc, તમે મેમરી કેટલાક બ્લોક પડતો કરી રહ્યાં છો કે ઢગલો હાલમાં છે. જો ઢગલો ખૂબ જ નાનો છે, પછી ઢગલો માત્ર વધવા રહ્યું છે, અને તેને આ દિશામાં વધે છે. તેથી આપણે કહેવું કે ઢગલો ખૂબ નાની છે. પછી તે થોડો વધવા અને આ બ્લોક કે જે હમણાં જ વધીને નિર્દેશક પાછા વિશે છે. , જ્યારે તમે મફત સામગ્રી, તમે ઢગલો વધુ રૂમ બનાવી રહ્યા છો જેથી પછીથી malloc માટે કૉલ કે મેમરી કે તમે પહેલાં મુક્ત હતી પુનઃઉપયોગ કરી શકાય છે. Malloc અને મફત વિશે મહત્વની બાબત એ છે કે તે તમને સંપૂર્ણ નિયંત્રણ આપે છે આ મેમરી બ્લોકની જીવનપર્યંત. વૈશ્વિક ચલો હંમેશા જીવંત. સ્થાનિક ચલો તેમની મર્યાદામાં જીવંત છે. જલદી તમે સર્પાકાર તાણવું આગળ જાય છે, જે સ્થાનિક ચલો મૃત છે. Malloced મેમરી જીવંત છે જ્યારે તમે તેને જીવંત કરવા માંગો છો અને પછી જ્યારે તમે તે કહેવું રિલીઝ થઈ રીલિઝ છે. તે ખરેખર છે મેમરીનો માત્ર 3 પ્રકારના ખરેખર. ત્યાં આપોઆપ મેમરી વ્યવસ્થાપન, કે જે સ્ટેક છે છે. વસ્તુઓ તમારા માટે આપોઆપ થાય છે. જ્યારે તમે પૂર્ણાંક એક્સ કહે, મેમરી પૂર્ણાંક એક્સ માટે ફાળવવામાં આવે છે. જ્યારે એક્સ અવકાશ બહાર જાય છે, મેમરી x માટે પુનઃજીવીત કરી છે. તો પછી ત્યાં ગતિશીલ મેમરી વ્યવસ્થાપન, કે જે malloc શું છે છે, જે છે જ્યારે તમે નિયંત્રણ નથી. તમે ઉમદા નક્કી ત્યારે મેમરી અને ફાળવણી કરવામાં જોઇએ નહિં. અને પછી ત્યાં સ્થિર છે, જે ફક્ત અર્થ એ થાય કે તે કાયમ રહે છે, જે વૈશ્વિક ચલો શું છે. તેઓ મેમરી ફક્ત હંમેશા છો. પ્રશ્નો? [વિદ્યાર્થી] તમે સર્પાકાર કૌંસ ઉપયોગ કરીને માત્ર એક બ્લોક વ્યાખ્યાયિત કરી શકું કર્યા પરંતુ એમ ન કરવાનું પાસે નિવેદન અથવા જ્યારે અથવા તે જેવી નિવેદન કંઈપણ જો? તમે એક કાર્ય તરીકે બ્લોક વ્યાખ્યાયિત કરવા માટે, પરંતુ શકો છો કે સર્પાકાર કૌંસ પણ ધરાવે છે. તેથી [વિદ્યાર્થી] તમે ફક્ત તમારા કોડમાં સર્પાકાર કૌંસ એક રેન્ડમ જોડી જેવી હોઈ શકે નહિં કે સ્થાનિક ચલો છે? >> હા, તમે આ કરી શકો છો. પૂર્ણાંક બાર અંદર અમે {int વાય = 3;} કરી શકે છે. કે અહીં પ્રયત્ન માનવામાં આવે છે. પરંતુ તે સંપૂર્ણપણે પૂર્ણાંક વાય તક વ્યાખ્યાયિત કરે છે. કે જે સેકન્ડ સર્પાકાર તાણવું પછી, વાય હવે ઉપયોગ કરી શકાતો નથી. તમે લગભગ ક્યારેય કે કરવું. શું થાય છે જ્યારે એક કાર્યક્રમ પૂર્ણ થાય છે પાછા ફરવામાં, ત્યાં એક જૂઠાણું / ગેરસમજ અડધા કે અમે ક્રમમાં ફક્ત વસ્તુઓ સરળ બનાવી આપવા પ્રકારની છે. અમે તમને જણાવવું કે જ્યારે તમે મેમરી ફાળવણી કે જે તમને ચલ માટે RAM ની કેટલીક ભાગ allocating કરી રહ્યાં છો. પરંતુ તમે ખરેખર સીધા રેમ કરી રહ્યાં છો ક્યારેય સ્પર્શ તમારા કાર્યક્રમો છે. જો તમે તેને લાગે, હું કેવી રીતે આકર્ષિત - અને ખરેખર, જો તમે GDB માં પસાર તમે આ જ વાત જોશો. અનુલક્ષીને કેટલી વખત તમે તમારી કાર્યક્રમ અથવા કાર્યક્રમ શું તમે ચલાવી રહ્યા છો સ્કોર છે, સ્ટેક હંમેશા શરૂ થઈ રહ્યું છે - તમે હંમેશા સરનામા oxbffff કંઈક આસપાસ ચલો જોવા જઈ રહ્યાં છો. તે સામાન્ય રીતે ક્યાંક છે કે પ્રદેશ છે. પરંતુ 2 કાર્યક્રમો કદાચ કેવી રીતે તે જ મેમરી પોઇંટરો હોઈ શકે? [વિદ્યાર્થી] ત્યાં જ્યાં oxbfff માટે રેમ પર હશે તેવું માનવામાં આવે છે કેટલાક મનસ્વી હોદ્દો છે કે જે વાસ્તવમાં અલગ જ્યારે કાર્ય તરીકે ઓળખાતું હતું તેના પર આધાર રાખીને સ્થળોએ હોઈ શકે છે. યાહ. શબ્દ વર્ચ્યુઅલ મેમરી છે. એક વિચાર કે દરેક એક પ્રક્રિયા છે, દરેક એક કાર્યક્રમ છે કે જે તમારા કમ્પ્યુટર પર ચાલી રહ્યું છે તેની પોતાની હોય છે - સંપૂર્ણપણે સ્વતંત્ર સરનામા જગ્યા - ચાલો 32 બિટ્સ ધારે. આ સરનામા જગ્યા છે. તેની પોતાની સંપૂર્ણપણે સ્વતંત્ર 4 વાપરવા માટે ગીગાબાઇટ્સ છે. તેથી જો તમે 2 પ્રોગ્રામો એકી સાથે ચલાવવા માટે, આ કાર્યક્રમ પોતે 4 ગીગાબાઇટ્સ જુએ છે, આ કાર્યક્રમ પોતે 4 ગીગાબાઇટ્સ જુએ છે, અને તે આ કાર્યક્રમ માટે ડિરેફરન્સ માટે અશક્ય એક નિર્દેશક છે અને આ કાર્યક્રમ માંથી મેમરી સાથે અંત. અને વર્ચ્યુઅલ મેમરી છે જે એક પ્રક્રિયાઓ સરનામા જગ્યા માંથી મેપિંગ છે રેમ પર વાસ્તવિક વસ્તુઓ છે. જેથી તે તમારી ઓપરેટિંગ સિસ્ટમ પર છે કે ખબર, હેય, જ્યારે આ વ્યક્તિ dereferences નિર્દેશક oxbfff છે, કે જે ખરેખરમાં મતલબ કે તેઓ રેમ 1000 બાઇટ માંગે છે, જ્યારે આ કાર્યક્રમ dereferences oxbfff જો તેઓ ખરેખર રેમ 10000 બાઇટ માંગે છે. તેઓ આપખુદ દૂર દૂરની હોઈ શકે છે. આ એક પ્રક્રિયાઓ સરનામા જગ્યા અંદર પણ વસ્તુઓ સાચી છે. આની જેમ તે પોતે તમામ 4 ગીગાબાઇટ્સ જુએ છે, પરંતુ આપણે કહેવું - [વિદ્યાર્થી] દરેક એક પ્રક્રિયા કરે છે - હવે કહો કે તમે RAM ની માત્ર 4 ગીગાબાઇટ્સ સાથે કોમ્પ્યુટર હોય છે. નથી દરેક એક પ્રક્રિયા સંપૂર્ણ 4 ગીગાબાઇટ્સ જુઓ છો? હા. >> પરંતુ 4 ગીગાબાઇટ્સ જુએ છે તે એક જૂઠાણું છે. તે માત્ર તે વિચારે છે કે તે આ બધી મેમરીનો છે કારણ કે તે ખબર નથી કોઇ અન્ય પ્રક્રિયા અસ્તિત્વમાં છે. તે માત્ર ત્યારે જ બધી મેમરીનો ઉપયોગ તે ખરેખર જરૂર પડશે. ઓપરેટિંગ સિસ્ટમ માટે આ પ્રક્રિયા માટે રેમ આપી નથી જઈ રહ્યા જો તે આ સમગ્ર વિસ્તારમાં કોઇ મેમરી નથી વાપરી છે. તે તે પ્રદેશ માટે મેમરી આપી નથી ચાલી રહ્યું છે. પરંતુ વિચાર તે છે - હું લાગે છે કરવાનો પ્રયાસ કરી રહ્યો છું - હું એક એનલોજી કલ્પના કરી શકતો નથી. છીછરાપણા હાર્ડ છે. વર્ચ્યુઅલ મેમરી પ્રશ્નો અથવા એક એક વસ્તુઓ તેને ઉકેલવા છે ઓફ છે કે પ્રક્રિયાઓ સંપૂર્ણપણે એક અન્ય અજાણ પ્રયત્ન કરીશું. અને જેથી તમે કોઇપણ કાર્યક્રમ લખી શકો છો કે જે હમણાં જ કોઇ નિર્દેશક dereferences, ગમે માત્ર એક કાર્યક્રમ છે કે જે * (ox1234) કહે લખો, અને કહે છે કે dereferencing મેમરી 1234 સરનામું. પરંતુ તે ઓપરેટિંગ સિસ્ટમ પર છે પછી શું 1234 અર્થ અનુવાદ. તેથી 1234 જો આ પ્રક્રિયા માટે માન્ય મેમરી સરનામા બને છે, જેમ તે સ્ટેક અથવા કંઈક પર છે, તો પછી આ કે મેમરી સરનામા મૂલ્ય આપશે જ્યાં સુધી આ પ્રક્રિયા જાણે છે. પરંતુ 1234 જો એ કોઈ માન્ય સરનામું નથી, જેમ કે તે જમીન પર થાય છે મેમરી કેટલાક અહીં થોડું ટુકડો છે કે જે સ્ટેક બહાર છે અને ઢગલો બહાર અને તમે ખરેખર છે કે, પછી કે જ્યારે તમે segfaults જેવી વસ્તુઓ વિચાર ઉપયોગ કર્યો નથી કારણ કે તમે મેમરી સ્પર્શ કરી રહ્યાં છો કે તમે સ્પર્શ નથી. આ પણ સાચું - સિસ્ટમ 32-bit, 32 બિટ્સ અર્થ છે કે તમે 32 થી મેમરી સરનામા વ્યાખ્યાયિત બિટ્સ હોય છે. તે શા માટે પોઇંટરો 8 બાઇટ્સ છે એટલા માટે છે કે 32 બિટ્સ 8 બાઇટ્સ છે - અથવા 4 બાઇટ્સ. પોઇન્ટર 4 બાઇટ્સ છે. તેથી જ્યારે તમે oxbfffff જેવા નિર્દેશક જોવા છે, કે જે - આપેલ કોઈપણ કાર્યક્રમ અંદર તમે હમણાં કોઇ મનસ્વી નિર્દેશક રચવા કરી શકો છો, ગમે ત્યાં ox0 માંથી બળદની 8 f's માટે - ffffffff. [વિદ્યાર્થી] શું તમે કહેવું છે કે તેઓ 4 બાઇટ્સ છો? >> યાહ. [વિદ્યાર્થી] પછી દરેક બાઈટ હશે - >> [બોડેન] હેક્સાડેસિમલ. હેક્સાડેસિમલ - 5, 6, 7, 8. પોઇન્ટર તેથી તમે હંમેશા હેક્સાડેસિમલ જોવા જઈ રહ્યાં છો. તે ફક્ત અમે કેવી રીતે પોઇંટરો વર્ગીકૃત. હેક્સાડેસિમલ દરેક 2 અંક 1 બાઇટ છે. તેથી ત્યાં 4 બાઇટ્સ માટે 8 હેક્સાડેસિમલ અંકો જ હશે. તેથી સિસ્ટમ 32-bit દરેક એક નિર્દેશક માટે 4 બાઇટ્સ પ્રયત્ન રહ્યું છે, જેનો અર્થ થાય છે કે જે તમારા પ્રક્રિયામાં તમે કોઈપણ મનસ્વી 4 બાઇટ્સ રચવા કરી શકો છો અને તે એક નિર્દેશક આઉટ કરી, જેનો અર્થ છે કે જ્યાં સુધી તે વાકેફ છે, પછી તે મેમરીમાં ના 32 બાઇટ્સ એક સંપૂર્ણ 2 સંબોધવા કરી શકો છો. ભલે તે ખરેખર છે કે જે પ્રવેશ નથી, પણ જો તમારા કમ્પ્યુટર માત્ર 512 મેગાબાઇટ્સ છે, તે વિચારે છે કે તે બધી મેમરીનો છે. અને ઓપરેટિંગ સિસ્ટમ માટે પૂરતી સ્માર્ટ છે કે તે માત્ર ફાળવવા તમે શું ખરેખર જરૂર છે. તે જ ન ઓહ, નવી પ્રક્રિયા: 4 શોના. યાહ. >> [વિદ્યાર્થી] એ બળદની શું અર્થ છે? તમે શા માટે લખી શકું? તે માત્ર હેક્સાડેસિમલ માટે પ્રતીક છે. જ્યારે તમે બેલ સાથે નંબર શરૂઆત જોવા માટે, ક્રમિક વસ્તુઓ હેક્સાડેસિમલ છે. [વિદ્યાર્થી] તમે શું થાય છે જ્યારે એક કાર્યક્રમ પૂર્ણ થાય વિશે સમજાવતા હતા. હા. >> ત્યારે થાય છે જ્યારે એક કાર્યક્રમ પૂર્ણ થાય છે શું ઓપરેટિંગ સિસ્ટમ છે ફક્ત જોડણીઓની છે કે તે આ સરનામાંઓ માટે છે, અને તે છે ભૂંસી નાંખે. ઓપરેટિંગ સિસ્ટમ હવે માત્ર એક બીજી વાપરવા માટે કાર્યક્રમ છે કે જે મેમરી આપી શકે છે. [વિદ્યાર્થી] ઠીક. તેથી જ્યારે તમે ઢગલો અથવા સ્ટેક અથવા વૈશ્વિક ચલો અથવા કંઈપણ પર કંઈક ફાળવો, તેઓ બધા જ જલદી કાર્યક્રમ સમાપ્ત થાય છે અદૃશ્ય થઈ કારણ કે ઓપરેટિંગ સિસ્ટમ હવે કોઇ અન્ય પ્રક્રિયા કે મેમરી આપવા મફત. [વિદ્યાર્થી] તેમ છતાં ત્યાં કદાચ હજુ પણ હોય તેવા પરચૂરણ ખર્ચ કિંમતો? >> યાહ. કિંમતો શક્યતા હજુ પણ છે ત્યાં. તે માત્ર તે માટે તેમને અંતે વિચાર મુશ્કેલ હોઈ છે બનશે. તે વધુ મુશ્કેલ છે તેમને અંતે વિચાર કરતાં તેને કાઢી ફાઈલ અંતે વિચાર છે કારણ કે કાઢી ફાઈલ પ્રકારની લાંબા સમય સુધી ત્યાં બેસે છે અને હાર્ડ ડ્રાઇવ ઘણો મોટો હોય છે. તેથી તે માટે મેમરી વિવિધ ભાગો પર ફરીથી લખી રહ્યું છે તે પહેલાં મેમરી ના ભાગ કે જે ફાઈલ પર ફરીથી લખી આપવામાં આવે છે બને છે. પરંતુ મુખ્ય મેમરી, RAM, તમે ઝડપથી ઘણો દ્વારા સાયકલ, તેથી તે ખૂબ જ ઝડપથી ફરીથી લખાઈ જ હશે. આ અથવા અન્ય કંઈપણ પર પ્રશ્નો? [વિદ્યાર્થી] હું એક અલગ વિષય વિશે પ્રશ્નો હોય છે. ઠીક છે. >> શું કોઇને આ પ્રશ્નો છે? ઠીક છે. વિવિધ વિષય. >> [વિદ્યાર્થી] ઠીક. હું પ્રથા કેટલાક પરીક્ષણોના પસાર થઇ રહ્યા હતા, અને તેમાંથી એક તે sizeof અંગે વાત કરી હતી અને કિંમત કે તે આપે છે અથવા અલગ પ્રકારના ચલ. હા. >> અને જણાવ્યું હતું કે બંને પૂર્ણાંક અને લાંબા બન્ને 4 વળતર, તેથી તેઓ બન્ને 4 બાઇટ્સ લાંબા છો. ત્યાં પૂર્ણાંક અને લાંબી વચ્ચે કોઇ તફાવત છે, અથવા તે જ વસ્તુ છે? હા, ત્યાં તફાવત છે. આ C સ્ટાન્ડર્ડ - હું કદાચ અપ વાસણ કરવા જઇ રહ્યો છું. આ C સ્ટાન્ડર્ડ માત્ર ગમે છે સી શું છે, સી સત્તાવાર દસ્તાવેજો આ તે શું કહે છે. જેથી C સ્ટાન્ડર્ડ માત્ર કહે છે કે ચાર રચે છે કાયમ અને હંમેશા 1 બાઇટ હશે. કે પછી બધું - ટૂંકા હંમેશા માત્ર કરતાં વધારે અથવા ઘરનાં પરચૂરણ કામો માટે સમાન હોવા તરીકે વ્યાખ્યાયિત થયેલ છે. આ સખત કરતા વધારે છે, પરંતુ હકારાત્મક હોઈ શકે છે. પૂર્ણાંક ફક્ત કરતાં મોટું અથવા ટૂંકા સમાન હોવા તરીકે વ્યાખ્યાયિત કરવામાં આવે છે. અને લાંબી ફક્ત કરતાં મોટું અથવા પૂર્ણાંક પર સમાન હોવા તરીકે વ્યાખ્યાયિત કરવામાં આવે છે. અને લાંબા લાંબા કરતાં વધારે અથવા લાંબા સમાન છે. તેથી જ વસ્તુ સી પ્રમાણભૂત વ્યાખ્યાયિત બધું સાપેક્ષ ક્રમ છે. મેમરી વાસ્તવિક જથ્થો કે વસ્તુઓ લાગી સામાન્ય રીતે અમલીકરણ કરવા માટે છે, પરંતુ તે યોગ્ય તેમજ આ બિંદુએ વ્યાખ્યાયિત કરે છે. >> [વિદ્યાર્થી] ઠીક. તેથી શોર્ટ્સ લગભગ હંમેશા માટે 2 બાઇટ્સ હશે આવે છે. Ints લગભગ હંમેશા માટે 4 બાઇટ્સ હશે આવે છે. લાંબા લોન્ગ્સ લગભગ હંમેશા 8 બાઇટ્સ હશે આવે છે. અને લોન્ગ્સ, તે છે કે શું તમે 32-bit અથવા સિસ્ટમ 64-bit ઉપયોગ કરી રહ્યા છો તેના પર આધાર રાખે છે. તેથી લાંબા સિસ્ટમ પ્રકાર અનુલક્ષે રહ્યું છે. જો તમે ઉપકરણ જેવા સિસ્ટમ 32-bit ઉપયોગ કરી રહ્યાં છો, તે માટે 4 બાઇટ્સ જ હશે. જો તમે તાજેતરમાં કમ્પ્યુટર્સ ઘણો જેવી 64-bit ઉપયોગ કરી રહ્યાં છો, તે માટે 8 બાઇટ્સ જ હશે. Ints લગભગ હંમેશા આ બિંદુએ 4 બાઇટ્સ. લાંબા લોન્ગ્સ લગભગ હંમેશા 8 બાઇટ્સ. ભૂતકાળમાં, ints માત્ર 2 બાઇટ્સ આપવામાં આવે છે. નોટિસ પણ છે કે આ સંપૂર્ણપણે કરતાં વધારે અને સમાન આ સંબંધો બધા સંતોષે છે. તેથી લાંબા સંપૂર્ણપણે પૂર્ણાંક તરીકે જ કદ પ્રયત્ન મંજૂરી છે, અને તે પણ લાંબા લાંબા તે જ કદના પ્રયત્ન માન્ય છે. અને તે માત્ર તેથી કે સિસ્ટમો 99,999% માં, તે માટે સમાન હોવો રહ્યું છે બને છે ક્યાં પૂર્ણાંક અથવા લાંબા લાંબા હોય છે. તે માત્ર 32-bit અથવા 64-bit પર આધાર રાખે છે. >> [વિદ્યાર્થી] ઠીક. ફ્લોટ્સ માં, કેવી રીતે અક્ષાંશ બિટ્સ દ્રષ્ટિએ નિયુક્ત બિંદુ છે? દ્વિસંગી તરીકે માંગો છો? >> યાહ. તમે CS50 માટે તે ખબર જરૂર નથી. તમે પણ 61 કે નથી જાણવા નથી. કે જે તમને ખરેખર કોઇ કોર્સ નથી જાણવા નથી. તે માત્ર પ્રતિનિધિત્વ છે. હું ચોક્કસ બીટ ફાળવવા ભૂલી જાવ. ફ્લોટિંગ પોઇન્ટ ઓફ વિચાર છે કે તમે બીટ્સ એક ચોક્કસ સંખ્યામાં પ્રતિનિધિત્વ ફાળવવા - હકીકતે, બધું વૈજ્ઞાનિક નોટેશનમાં છે. તેથી તમે બીટ્સ એક ચોક્કસ નંબર પર 1,2345 જેમ નંબર જ પ્રતિનિધિત્વ ફાળવવા. હું 5 કરતાં વધુ અંકો સાથે નંબર ક્યારેય પ્રતિનિધિત્વ કરી શકે છે. પછી તમે પણ બીટ્સ એક ચોક્કસ નંબર ફાળવી છે કે જેથી તે જેવી હોય છે તમે માત્ર એક ચોક્કસ નંબર સુધી જઈ શકે છે, જેમ કે સૌથી મોટું હિમાયતી તમારી પાસે કરી શકો છો, અને તમે માત્ર એક ચોક્કસ હિમાયતી માટે નીચે જઈ શકે છે, ગમે કે નાના ઘાત તમારી પાસે કરી શકો છો. હું યાદ નથી ચોક્કસ માર્ગ બિટ્સ આ કિંમતો બધી સોંપાયેલ છે, પરંતુ બીટ્સ એક નિશ્ચિત સંખ્યા 1,2345 માટે સમર્પિત હોય છે, બિટ્સ બીજા ચોક્કસ સંખ્યા હિમાયતી માટે સમર્પિત હોય છે, અને તે માત્ર શક્ય કરવા માટે અમુક ચોક્કસ માપ એક હિમાયતી પ્રતિનિધિત્વ કરે છે. [વિદ્યાર્થી] અને એક ડબલ? વધારાની લાંબા ફ્લોટ જેમ કે છે? >> યાહ. તે હવે તમે 4 બાઇટ્સ બદલે 8 બાઇટ્સ ઉપયોગ કરી રહ્યા છો તે સિવાય ફ્લોટ તરીકે જ વાત છે. હવે તમે 9 અંક અથવા 10 અંકોનો ઉપયોગ કરી શકશો, અને આ માટે 300 ના બદલે 100 થી ઉપર જવા સમર્થ હશે. >> [વિદ્યાર્થી] ઠીક. અને ફ્લોટ્સ પણ છે 4 બાઇટ્સ. હા. >> વેલ, ફરી, તે કદાચ સામાન્ય અમલીકરણ પર આધાર રાખે છે એકંદર, પરંતુ ફ્લોટ્સ 4 બાઇટ્સ હોય છે, ડબલ્સમાં 8 છે. ડબલ્સમાં ડબલ કહેવામાં આવે છે કારણ કે તેઓ ડબલ ફ્લોટ્સ માપ છે. [વિદ્યાર્થી] ઠીક. અને ત્યાં ડબલ ડબલ્સ છે? >> નથી ત્યાં. મને લાગે છે - >> લાંબા લોન્ગ્સ જેમ [વિદ્યાર્થી] >> યાહ. હું નથી લાગતું નથી. હા. ગયા વર્ષના ટેસ્ટ પર [વિદ્યાર્થી] ત્યાં મુખ્ય કાર્ય વિશે પ્રશ્ન હતો તમારા કાર્યક્રમ ભાગ હોઈ હોય છે. જવાબ એ છે કે તે તમારા કાર્યક્રમ ભાગ નથી. પરિસ્થિતિ શું છે? કે હું શું જોયું. [બોડેન] એવું લાગે છે - >> [વિદ્યાર્થી] શું પરિસ્થિતિ? શું તમે સમસ્યા છે? >> [વિદ્યાર્થી] અરે વાહ, હું નિશ્ચિતપણે તે ખેંચવાનો અપ કરી શકો છો. તે પ્રયત્ન નથી, ટેકનીકલી છે, પરંતુ મૂળભૂત રીતે તે જ હશે. [વિદ્યાર્થી] હું એક અલગ વર્ષ ના એક જોયું. તે સાચું અથવા ખોટું જેવી હતી: એ માન્ય - >> ઓહ, એક કેચ ફાઈલ. . [વિદ્યાર્થી] કોઈપણ કેચ ફાઈલ હોવી જ જોઈએ - [એક જ સમયે બંને બોલતા - દુર્બોધ] ઠીક છે. જેથી અલગ છે. એક સી. ફાઈલ માત્ર વિધેયો સમાવે જરૂર છે. તમે મશીન કોડ એક ફાઇલ, દ્વિસંગી, ગમે કમ્પાઇલ કરી શકો છો, વગર તે એક્ઝેક્યુટેબલ હજુ સુધી છે. માન્ય એક્ઝેક્યુટેબલ એક મુખ્ય કાર્ય હોવો જ જોઈએ. તમે 1 ફાઈલમાં 100 કાર્યો પરંતુ કોઇ મુખ્ય લખી શકો છો અને પછી દ્વિસંગી કે નીચે કમ્પાઇલ, પછી તમે બીજી ફાઇલ છે કે જે માત્ર મુખ્ય છે લખવા પરંતુ તે આ વિધેયોને સમૂહ કહે છે અહીં પર આ દ્વિસંગી ફાઈલ છે. અને તેથી જ્યારે તમે એક્ઝેક્યુટેબલ બનાવી રહ્યા છો, કે જે linker શું કરે છે છે તે આ એક એક્ઝેક્યુટેબલ માં 2 દ્વિસંગી ફાઈલો સાથે જોડાયેલું છે. તેથી સી. ફાઈલ માટે એક મુખ્ય કાર્ય હોય છે જરૂર નથી. અને મોટા પાયા પર તમે કોડ સી. ફાઈલો અને 1 મુખ્ય ફાઈલ હજારો જોશો. વધુ પ્રશ્નો છે? [વિદ્યાર્થી] ત્યાં બીજા પ્રશ્ન હતો. એવું કહેવાય બનાવવા કમ્પાઇલર છે. સાચું કે ખોટું? અને જવાબ ખોટા હતા, અને હું સમજી તે શા માટે રણકાર જેવી નથી. પરંતુ અમે શું કરી જો તે નથી કહી શકું? મેક મૂળભૂત માત્ર છે - હું જોઈ શકો છો ચોકકસ શું તે કહે છે. પરંતુ તે માત્ર આદેશો ચલાવે છે. બનાવો. હું આ અપ ખેંચી શકે છે. યાહ. ઓહ, હા. મેક પણ છે કે જે કરે છે. આ કહે છે કે મેક ઉપયોગીતા હેતુ આપોઆપ નક્કી કરવા માટે છે જે એક મોટા કાર્યક્રમ ટુકડાઓ recompiled કરવાની જરૂર છે અને આદેશો અદા કરવા માટે તેમને પુનઃકમ્પાઈલ. તમે જે ફાઇલો સંપૂર્ણપણે વિશાળ છે બનાવવા કરી શકો છો. મેક ફાઈલોની સમય સ્ટેમ્પ જુએ છે અને, જેમ કે અમારી પહેલાં જણાવ્યું હતું કે, તમે વ્યક્તિગત ફાઈલો કમ્પાઈલ નીચે કરી શકો છો, અને તે જ્યાં સુધી તમે linker મેળવવા નથી કે તેઓ સાથે મળીને એક એક્ઝેક્યુટેબલ મૂકવામાં રહ્યા છો. તેથી જો તમે 10 અલગ અલગ ફાઈલો હોય અને તમે તેમને 1 ફેરફાર કરી શકો છો, પછી મેક કરવા જઈ રહ્યો છે શું માત્ર પુનઃકમ્પાઈલ છે કે 1 ફાઈલ અને પછી બધું જ એક સાથે ફરીથી લિંક. પરંતુ તે ખૂબ કરતા dumber છે. તે તમારા પર છે સંપૂર્ણપણે વ્યાખ્યાયિત કે જે છે તે શું કરી હોવી જોઈએ. તે મૂળભૂત રીતે આ સમય સ્ટેમ્પ સામગ્રી ઓળખી ક્ષમતા હોય છે, પરંતુ તમે મેક ફાઈલ લખવા માટે કંઈપણ કરી શકે છે. તમે ફાઈલ બનાવવા કે જેથી જ્યારે તમે તે માત્ર cd અન્ય ડિરેક્ટરી માટે બનાવવા લખો. લખી શકો છો હું હતાશ રહ્યું હતી હું ખીલી બધું મારું ઉપકરણ ની અંદર કારણ કે અને પછી હું મેક ના પીડીએફ જુઓ. તેથી હું ફાઇન્ડર પર જાઓ અને હું જાઓ કરી શકો છો, સર્વર સાથે જોડાવ, અને સર્વર સાથે જોડાવા માટે હું મારા ઉપકરણ છે, અને પછી હું પીડીએફ ખોલવા કે LaTeX દ્વારા સંકલિત નહીં. પરંતુ હું હતાશ રહ્યું હતી દરેક એક સમય મેં પીડીએફ તાજું જરૂરી છે કારણ કે, હું તેને એક ચોક્કસ ડિરેક્ટરી છે કે જે તેને ઍક્સેસ કરી શકે નકલ હતી અને તે નકામી મેળવવામાં આવી હતી. તેથી તેના બદલે હું મેક ફાઈલ છે, કે જે તમે કેવી રીતે તે વસ્તુઓ બનાવે લખ્યું છે. કેવી રીતે તમે બનાવવા આ PDF LaTeX છે. ફક્ત કોઇ પણ અન્ય મેક ફાઈલ - જેવી કે હું માનું કે તમે મેક ફાઇલો જોઇ ન હોય, પરંતુ અમે તે સાધન વૈશ્વિક મેક ફાઈલ કે જે હમણાં જ કહે છે, જો તમે એક સી ફાઈલ કમ્પાઈલ કરવામાં આવે છે, રણકાર વાપરો. અને તેથી મારું મેક ફાઈલ અહીં કે હું બનાવવા હું કહું છું, આ ફાઇલ કરવા માટે તમે પીડીએફ LaTeX સાથે કમ્પાઇલ કરવા માંગો છો જઈ રહ્યાં છો. અને તેથી તે પીડીએફ LaTeX કે સંકલન કરી રહી છે. મેક નથી સંકલન છે. તે માત્ર ક્રમ હું ઉલ્લેખિત છે આ આદેશો ચલાવવા. તેથી તે પીડીએફ LaTeX ચાલે છે, તે ડિરેક્ટરી હું તે કરી નકલ કરવા માંગો છો માટે નકલ કરે છે, તે cd ડિરેક્ટરી માટે અને અન્ય વસ્તુઓ કરે છે, પરંતુ બધા તે જ્યારે ફાઈલ ફેરફારો ઓળખી છે, અને જો તે બદલી, પછી તે આદેશો કે જે તે માટે માનવામાં આવે છે ચાલશે ફાઇલ ફેરફારો ત્યારે. >> [વિદ્યાર્થી] ઠીક. મને ખબર નથી કે જ્યાં વૈશ્વિક મેક ફાઈલો છે મારા માટે તપાસ માટે. અન્ય પ્રશ્નો છે? ભૂતકાળની કંઈપણ અંગેની ક્વિઝ? કોઈપણ નિર્દેશક વસ્તુઓ? ત્યાં જેમ પોઇન્ટર સાથે ગૂઢ બાબતો છે - હું તેના પર ક્વિઝ પ્રશ્ન શોધવા કરવાનો પ્રયત્ન નથી માંગવાનો - પરંતુ માત્ર વસ્તુ આ પ્રકારની હોય છે. ખાતરી કરો કે તમે સમજો કે જ્યારે હું કહી બનાવો પૂર્ણાંક * x * વાય - આ બરાબર અહીં કંઈપણ નથી, હું માનું. પરંતુ જેમ * x * વાય તે 2 ચલો કે સ્ટેક પર છે. જ્યારે હું કહી એક્સ = malloc (sizeof (પૂર્ણાંક)), એક્સ હજુ સ્ટેક પર એક ચલ છે, malloc આ ઢગલો માં ઉપર કેટલાક બ્લોક છે, અને અમે ઢગલો માટે એક્સ બિંદુ આવી રહી છે. આ ઢગલો માટે સ્ટેક પોઇન્ટ પર કંઈક તેથી. જ્યારે પણ તમે કશું malloc, તમે ખચીત તે નિર્દેશક ની અંદર સંગ્રહિત કરી રહ્યાં છો. જેથી નિર્દેશક સ્ટેક પર છે, malloced બ્લોક ઢગલો છે. ઘણા લોકો મૂંઝવણમાં વિચાર અને કહે પૂર્ણાંક * x = malloc; x એટલે ઢગલો છે. નંબર એક્સ શું નિર્દેશ આ ઢગલો છે. પોતે એક્સ સ્ટેક પર છે, જ્યાં સુધી કારણ ગમે તે માટે તમે એક્સ વૈશ્વિક ચલ પ્રયત્ન કરેલ છે, જે કિસ્સામાં તે મેમરી અન્ય પ્રદેશમાં બને છે. ટ્રૅક રાખવા તેથી, આ બોક્સ અને તીર આકૃતિઓ સુંદર ક્વિઝ માટે સામાન્ય છે. અથવા જો તે 0 ક્વિઝ પર નથી, તેને 1 ક્વિઝ પર રહેશે. તમે આ બધી ખબર છે, સંકલન માં પગલાંઓ જોઈએ કારણ કે તમે તે પર પ્રશ્નોના જવાબ હતો. હા. [વિદ્યાર્થી] અમે તે પગલાં પર જાઓ શકે - >> શ્યોર. પગલાંઓ અને સંકલન પહેલાં અમે preprocessing હોય છે, સંકલન, એસેમ્બલ, અને જોડે છે. Preprocessing. કે શું થાય છે? તે સરળ માં પગલું છે - અને સાથે સાથે, જેમ - તેનો અર્થ તે સ્પષ્ટ પ્રયત્ન કરીશું નથી, પરંતુ તે સૌથી સરળ પગલું છે. તમે ગાય્સ તે તમે પોતે જ અમલ કરી શકે છે. યાહ. [વિદ્યાર્થી] લો તમે તમારા હોય શું આ જેવા સમાવેશ થાય છે અને તે પછી અને નકલો પણ વ્યાખ્યાયિત કરે છે. તે # સમાવેશ થાય છે જેવી વસ્તુઓ માટે જુએ છે અને # વ્યાખ્યાયિત કરવા માટે, અને તે માત્ર નકલો અને pastes તે ખરેખર શું અર્થ. તેથી જ્યારે તમે કહી # cs50.h સમાવેશ થાય છે, જે preprocessor નકલ છે અને cs50.h પેસ્ટ તે લીટી માં. જ્યારે તમે કહી # એક્સ વ્યાખ્યાયિત કરવા માટે 4 છે, preprocessor સમગ્ર કાર્યક્રમ જાય છે અને 4 થી x ની તમામ ઘટકોને બદલે છે. તેથી preprocessor માન્ય સી ફાઈલ લે છે અને માન્ય સી ફાઈલ આઉટપુટો વસ્તુઓ છે જ્યાં નકલ કરવામાં આવી અને પેસ્ટ કર્યું. તેથી હવે સંકલન. કે શું થાય છે? [વિદ્યાર્થી] એવું સી ના દ્વિસંગી જાય છે. [બોડેન] તે બાઈનરી તમામ થતું નથી. [વિદ્યાર્થી] પછી મશીન કોડ માટે? >> તે મશીન કોડ નથી. [વિદ્યાર્થી] એસેમ્બલી? >> એસેમ્બલી. તે એસેમ્બલી જાય તે પહેલાં સી કોડ બધી રીતે જાય છે, અને મોટા ભાગની ભાષાઓ કંઈક આના જેવું નથી. કોઈ પણ ભાષા ઉચ્ચ સ્તરીય ચૂંટો અને જો તમે તેને કમ્પાઇલ જઈ રહ્યાં છો, તે પગલાંઓ માં કમ્પાઇલ સંભાવના છે. પ્રથમ તે માટે સી માટે Python કમ્પાઇલ ચાલી રહ્યું છે, પછી તે એસેમ્બલી સી કમ્પાઇલ ચાલી રહ્યું છે, અને પછી વિધાનસભા માટે બાઈનરી અનુવાદ કરો રહ્યું છે. તેથી કમ્પાઇલ તેને સી ના વિધાનસભા લાવી રહ્યું છે. આ સંકલન શબ્દ સામાન્ય રીતે તે એક ઉચ્ચ સ્તર માંથી લાવવામાં અર્થ થાય છે નીચા લેવલ પ્રોગ્રામીંગ ભાષા છે. તેથી આ સંકલન માં માત્ર પગલું જ્યાં તમે એક ભાષા ઉચ્ચ સ્તર સાથે શરૂ થાય છે અને એક ભાષા નીચા સ્તર સાથે અંત છે, અને તે છે કેમ પગલું કમ્પાઇલ કહેવામાં આવે છે. સંકલન દરમિયાન [વિદ્યાર્થી], ચાલો કહે છે કે તમે # સમાવેશ કર્યું છે cs50.h. વિલ પણ કમ્પાઇલર પુનઃકમ્પાઈલ આ cs50.h, કાર્યો કે ત્યાં છે, જેમ કે અને એસેમ્બલી કોડમાં કે તેમજ અનુવાદ, અથવા તેને કૉપિ અને પેસ્ટ કરેલો આવશે કંઈક કે પૂર્વ વિધાનસભા રહી છે? cs50.h ખૂબ વિધાનસભામાં ખૂબ સમાપ્ત થશે કયારેય. કાર્ય પ્રોટોટાઇપ અને વસ્તુઓ જેવી સામગ્રી છે ફક્ત તમે સાવચેત રહો. તે ગેરન્ટી આપે છે કે કમ્પાઇલર વસ્તુઓ તપાસો કે તમે વિધેયો કૉલ કરી શકો છો જમણી વળતર પ્રકારો અને જમણી દલીલો અને સામગ્રી સાથે. તેથી cs50.h આ ફાઇલમાં preprocessed આવશે, અને પછી જ્યારે તે સંકલન છે તે મૂળભૂત રીતે બગાઙ છે પછી તે ખાતરી કરો કે બધું યોગ્ય રીતે કરવામાં આવી રહી છે કહેવાય છે બનાવે છે. પરંતુ CS50 પુસ્તકાલય વ્યાખ્યાયિત કાર્યો, કે જે cs50.h અલગ છે, તે અલગ શકાતી નથી સંકલન કરશે. કે જે વાસ્તવમાં લિંક પગલાંની નીચે આવશે, તેથી અમે એક બીજા કે મળશે. પરંતુ પ્રથમ, શું એસેમ્બલ કરવામાં આવે છે? [વિદ્યાર્થી] બાઈનરી એસેમ્બલી? >> યાહ. એસેમ્બલ. અમે તેને કમ્પાઇલ નથી કહી કારણ કે એસેમ્બલી ઘટનાએ દ્વિસંગી એક શુદ્ધ અનુવાદ હોય. ત્યાં એસેમ્બલી માંથી દ્વિસંગી પર જઈને ખૂબ ઓછા તર્ક છે. તે માત્ર એક ટેબલ માં શોધી ગમે છે, ઓહ, અમે આ સૂચના છે; કે 01110 દ્વિસંગી અનુલક્ષે છે. અને તેથી ફાઈલો છે કે જે સામાન્ય રીતે એસેમ્બલ આઉટપુટ છે ઓ ફાઈલો છે.. અને ઓ. ફાઇલો છે, આપણે શું પહેલાં કહેતા હતા, ફાઇલમાં એક મુખ્ય કાર્ય છે કેવી રીતે જરૂર નથી. કોઈપણ ફાઇલ ઓ. ફાઈલ ડાઉન થઇ શકે છે કારણ કે તે કોઈ માન્ય સી ફાઈલ છે તરીકે કમ્પાઇલ કરેલ છે. તે ઓ. શકાય નીચે સંકલિત કરી શકે છે. હવે, લિંક છે જે વાસ્તવમાં એક ટોળું લાવે ઓ ફાઈલો છે. અને તેમને એક્ઝેક્યુટેબલ માટે લાવે છે. અને તેથી લિંક કરે છે શું છે તમે CS50 પુસ્તકાલય એક ઓ. ફાઇલ તરીકે વિચાર કરી શકો છો. તે પહેલાથી જ સંકલિત દ્વિસંગી ફાઇલ છે. અને તેથી જ્યારે તમે તમારી ફાઈલ, તમારા hello.c છે, કે જે GetString કહે કમ્પાઇલ, hello.c નીચે hello.o માટે કમ્પાઈલ નહીં, hello.o દ્વિસંગી હવે છે. તે GetString ઉપયોગ કરે છે, તેથી તે માટે cs50.o પર જાઓ જરૂર છે, અને linker તેમને એકસાથે smooshes અને આ ફાઈલમાં GetString નકલ કરે છે અને એક એક્ઝેક્યુટેબલ કે તમામ કાર્યો તેને જરૂર છે સાથે બહાર આવે છે. તેથી cs50.o ખરેખર એક ઓ ફાઇલ નથી, પરંતુ તે નજીક પર્યાપ્ત છે કે ત્યાં કોઈ મૂળભૂત તફાવત તે છે છે. તેથી માત્ર લિંક ફાઈલો સમૂહ લાવે કે અલગથી ના બધા વિધેયોને સમાવે હું ઉપયોગ કરવાની જરૂર છે અને એક્ઝેક્યુટેબલ કે ખરેખર ચાલશે બનાવે છે. અને જેથી પણ આપણે શું પહેલાં કહેતા હતા જ્યાં તમે 1000 પાસે કેચ ફાઈલો છે. શકો છો, તો તમે તેમને બધા કમ્પાઈલ ઓ ફાઈલો. જે કદાચ થોડો સમય લાગી જશે, પછી તમે 1 કેચ ફાઈલ બદલો.. તમે માત્ર કે 1. કો ફાઈલ અને પછી ફરીથી લિંક બાકીનું બધું પુનઃકમ્પાઈલ જરૂર છે, બધું ફરી પાછા સાથે લિંક. [વિદ્યાર્થી] જ્યારે અમે લિંક કરી રહ્યાં છો અમે lcs50 લખી? અરે વાહ, જેથી-lcs50. આ linker કે ધ્વજ સિગ્નલો કે જે તમને પુસ્તકાલયમાં લિંક જોઇએ. પ્રશ્નો? શું અમે પ્રથમ વ્યાખ્યાન કે 5 સેકન્ડ કરતાં અન્ય દ્વિસંગી પર ગઇ? હું નથી લાગતું નથી. તમે મોટી ઓસ તમામ કે અમે ઉપર ગયા કર્યું છે જાણવું જોઈએ, અને તમે કરવાનો પ્રયત્ન, જો અમે તમને એક કાર્ય આપ્યો જોઈએ, તમે કહો તે મોટી ઓ છે, આશરે કરવાનો પ્રયત્ન કરીશું. અથવા સારી રીતે, મોટા ઓ ખરબચડી હોય છે. તેથી જો તમે વસ્તુઓ સમાન નંબર પર રહ્યાં આંટીઓ માટે નેસ્ટ જુઓ, >> સ્ક્વેર્ડ [વિદ્યાર્થી] n - પૂર્ણાંક જ, જ > તે જરૂરી n સ્ક્વેર્ડ કરે છે. જો તમે ટ્રિપલ નેસ્ટ છે, તે n cubed કરે છે. તેથી વસ્તુ કે સૉર્ટ તમે તરત જ નિર્દેશ કરવાનો પ્રયત્ન કરીશું. તમે દાખલ સૉર્ટ કરો અને બબલ સૉર્ટ જણાવો અને સૉર્ટ કરો અને તે તમામ મર્જ કરવાની જરૂર છે. તેને સરળ છે તે સમજવા માટે શા માટે તેઓ તે n સ્ક્વેર્ડ અને એન લોગ n છે અને તે તમામ કારણ કે મને લાગે છે કે ત્યાં એક ક્વિઝ પર એક વર્ષ જ્યાં અમે મૂળભૂત રીતે તમે આપેલો હતો બબલ પ્રકારના એક અમલીકરણ અને કહ્યું હતું કે, "આ કાર્ય ઓફ ચાલી રહેલ સમય શું છે?" તેથી જો તમે તેને બબલ સૉર્ટ તરીકે ઓળખે છે, તો પછી તમે તુરંત જ n સ્ક્વેર્ડ કહેવું કરી શકો છો. પરંતુ જો તમે તેને જોવા, તમે પણ તે બબલ સૉર્ટ ખ્યાલ જરૂરી નથી; તમે હમણાં જ કહેવું આ અને આવું કરી શકતા નથી. આ સ્ક્વેર્ડ n છે. [વિદ્યાર્થી] ત્યાં ખરેખર કોઈ ખડતલ ઉદાહરણો તમે સાથે આવી શકે છે, બહાર figuring એક સમાન વિચાર જેમ? મને નથી લાગતું અમે તમને કોઈ ખડતલ ઉદાહરણો આપતા. આ પરપોટો સૉર્ટ વસ્તુ વિશે તરીકે ખડતલ તરીકે અમે જશે છે, અને પણ છે કે, જ્યાં સુધી તમે સમજો કે તમે એરે પર વારો કરી રહ્યાં છો એરે દરેક તત્વ માટે, કે જે કંઈક છે જે સ્ક્વેર્ડ n છે પ્રયત્ન રહ્યું છે. ત્યાં અહીં જેવા સામાન્ય પ્રશ્નો, અમે છે - ઓહ. જસ્ટ બીજા દિવસે ડો દાવો કર્યો, "હું એક એલ્ગોરિધમ છે કે જે એરે સૉર્ટ કરી શકો છો આવિષ્કાર કર્યો છે "ઓ (લોગ એન) સમય! માં n સંખ્યાની" તેથી અમે કેવી રીતે જાણી શકું કે અશક્ય છે? [અશ્રાવ્ય વિદ્યાર્થી પ્રતિભાવ] >> યાહ. ખૂબ જ ઓછામાં ઓછા કરવા માટે, તમે એરે દરેક તત્વ સ્પર્શ હોય છે, જેથી તે અશક્ય છે કે એક એરે સૉર્ટ - જો બધું ક્રમમાંગોઠવાયેલનથી ક્રમમાં હોય તો, પછી તમે એરે બધું સ્પર્શ કરી રહ્યા છીએ, જેથી તે અશક્ય છે તે n ના ઓ કરતાં ઓછું કામ કરે છે. [વિદ્યાર્થી] તમે અમને n ના ઓ માં તે કરવા સક્ષમ હોવાની કે ઉદાહરણ દર્શાવ્યું જો તમે મેમરીની જરુર વાપરો. >> યાહ. અને that's - હું ભૂલી જાઓ શું that's - તે પ્રકારની ગણાય છે? હમ્મ. તે એક પૂર્ણાંક સોર્ટિંગ એલ્ગોરિધમ છે. હું આ માટે ખાસ નામ શોધી હતી કે હું છેલ્લા અઠવાડિયે યાદ નથી કરી શકે છે. યાહ. આ પ્રકારની પ્રકારો કે જે n ના મોટા ઓ વસ્તુઓ પરિપૂર્ણ કરી શકે છે. પરંતુ ત્યાં મર્યાદાઓ હોય છે, જેમ કે તમે માત્ર પૂર્ણાંકો ચોક્કસ સંખ્યા કરી શકો છો ઉપયોગ છે. પ્લસ તમે કંઈક that's સૉર્ટ કરવાનો પ્રયાસ કરી રહ્યાં છો જો - જો તમારી એરે 012, -12, 151, 4 મિલિયન છે, પછી તે એક તત્વ સંપૂર્ણપણે સમગ્ર સોર્ટિંગ વિનાશ રહ્યું છે. પ્રશ્નો? [વિદ્યાર્થી] જો તમે ફરી યાદ આવવું કાર્ય હોય છે અને તે માત્ર ફરી યાદ આવવું કોલ્સ બનાવે છે પરત નિવેદન અંદર, કે ફરી યાદ આવવું પૂંછડી છે, અને જેથી રનટાઇમ દરમ્યાન વધુ મેમરી નથી ઉપયોગ કરશે અથવા તેને ઓછામાં ઓછા તુલનાત્મક મેમરીનો ઉપયોગ એક ઉકેલ પુનરાવર્તન થશે? [બોડેન] હા. આ સંભવિત અંશે ધીમી હોઇ શકે છે, પરંતુ ખરેખર. ફરી યાદ આવવું ટેઈલ ખૂબ સારી છે. સ્ટેક ફ્રેમ્સ પર ફરીથી છીએ, આપણે કહેવું અમે મુખ્ય હોય છે અને અમે પૂર્ણાંક (પૂર્ણાંક x) બાર અથવા કંઈક હોય છે. આ એક સંપૂર્ણ ફરી યાદ આવવું કાર્ય નથી, પરંતુ વળતર બાર (x - 1). તેથી દેખીતી રીતે, આ અપૂર્ણ છે. તમે આધાર કેસો અને સામગ્રી જરૂર છે. પરંતુ અહીં વિચાર છે કે આ ફરી યાદ આવવું પૂંછડી હોય છે, કે જે જ્યારે મુખ્ય કોલ્સ પટ્ટી તેને તેના સ્ટેક ફ્રેમ બનશે થાય છે. આ સ્ટેક ફ્રેમમાં ત્યાં મેમરી થોડું બ્લોક જ હશે કે તેની દલીલ એક્સ અનુલક્ષે છે. અને તેથી આપણે કહેવું મુખ્ય બાર (100) કૉલ થાય છે; તેથી એક્સ થી 100 તરીકે બહાર શરૂ થઈ રહ્યું છે. જો કમ્પાઇલર ઓળખે છે કે આ એક પૂંછડી ફરી યાદ આવવું કાર્ય છે, પછી જ્યારે બાર તેની ફરી યાદ આવવું કોલ બાર માટે બનાવે છે, તેના બદલે એક નવી સ્ટેક ફ્રેમ, કે જે જ્યાં સ્ટેક મોટા ભાગે વધતી શરૂ બનાવવા, છેવટે તે ઢગલો માં ચલાવો અને પછી તમે segfaults મળશે કારણ કે મેમરી અથડાઈ શરૂ થાય છે. તેથી તેના બદલે તેના પોતાના સ્ટેક ફ્રેમ બનાવવા માટે, તેને ખ્યાલ કરી શકો છો, હેય, હું આ સ્ટેક ફ્રેમ પર પાછા આવવાની ખરેખર ક્યારેય જરૂર છે, તેથી તેના બદલે હું માત્ર 99 સાથે આ દલીલ બદલો અને પડશે પછી બાર શરૂ બધા ઉપર. અને પછી તેને ફરીથી કરવા કરશે અને તેના બદલામાં બાર સુધી પહોંચી જશે (x - 1), અને એક નવી સ્ટેક ફ્રેમ બનાવવા બદલે, તે માત્ર 98 સાથે તેના વર્તમાન દલીલ બદલશે અને પછી બાર ખૂબ જ શરૂઆત પર પાછા કૂદકો. તે કામગીરી સ્ટેક પર કે 1 કિંમત બદલી અને શરૂઆત પર પાછા જમ્પિંગ, ખૂબ અસરકારક છે. તેથી માત્ર આ એક અલગ કાર્ય જેવા જ મેમરી વપરાશ જે પુનરાવર્તન છે કારણ કે તમે માત્ર 1 સ્ટેક ફ્રેમ ઉપયોગ કરી રહ્યાં છો, પરંતુ તમે downsides નથી પીડાતા કરી રહ્યાં છો માટે વિધેયો કૉલ કર્યા છે. કૉલ વિધેયો અંશે ખર્ચાળ હોય છે કારણ કે તે આ તમામ સેટઅપ કરવું શકે છે અને teardown અને આ તમામ સામગ્રી. તેથી આ પૂંછડી રિકર્ઝન સારો છે. [વિદ્યાર્થી] તે શા માટે નવા પગલાંઓ બનાવવા નથી? કારણ કે તે ખબર પડે છે કે તે જરૂરી નથી. બાર માટે કોલ માત્ર ફરી યાદ આવવું કોલ પરત આવે છે. તેથી તે માટે વળતર કિંમત સાથે કંઇપણ જરૂર નથી. તે માત્ર તરત જ તેને પરત ચાલી રહ્યું છે. તેથી જ તે તેની પોતાની દલીલ બદલો અને પ્રારંભ બનશે. અને પણ, જો તમે પૂંછડી ફરી યાદ આવવું આવૃત્તિ નહિં હોય, પછી તમે આ બધા બાર જ્યાં જ્યારે આ પટ્ટી આપે વિચાર તે આ માટે તેની કિંમત પરત, પછી કે બાર તરત જ આપે છે અને તે આ એક કરવા માટે તેની કિંમત આપે છે, તો પછી તે માત્ર તરત જ પાછા જવાનું છે અને આ એક કરવા માટે તેની કિંમત આવો. તેથી તમે આ બધું સ્ટેક બંધ પોપિંગ આ સાચવી રહ્યા છો કારણ કે વળતર કિંમત માત્ર તમામ રીતે પસાર કરી બેક અપ રીતે જઈ રહ્યું છે. તેથી અમારા દલીલ શા માટે બદલો માત્ર સુધારાયેલ દલીલ સાથે અને પ્રારંભ કરીએ? જો કાર્ય ફરી યાદ આવવું પૂંછડી નથી, જો તમે કંઈક કરવા - [વિદ્યાર્થી] જો બાર (x + 1). >> યાહ. તેથી જો તમે તે શરત મૂકી, પછી તમે પરત કિંમત સાથે કંઈક કરી રહ્યા છીએ. અથવા જો તમે માત્ર 2 વળતર કરવું * બાર (x - 1). તેથી હવે બાર (x - 1) કરવા પરત કરવાની જરૂર માટે 2 કિંમત ગણી ગણતરી કરવા માટે, તેથી હવે તેની પોતાની અલગ સ્ટેક ફ્રેમ જરૂર નથી, અને હવે, કોઈ બાબત હાર્ડ તમે કેવી રીતે પ્રયત્ન કરો, તમે જરૂર જઈ રહ્યાં છો - આ પૂંછડી ફરી યાદ આવવું નથી. [વિદ્યાર્થી] હું એક રિકર્ઝન લાવવા માટે એક પૂંછડી રિકર્ઝન માટે લક્ષ્ય રાખ્યું પ્રયાસ છો - [બોડેન] એક આદર્શ વિશ્વમાં, પરંતુ CS50 તમને નથી. ક્રમમાં પૂંછડી રિકર્ઝન વિચાર, સામાન્ય રીતે, તમે વધારાની દલીલ સેટ જ્યાં બાર વાય માં પૂર્ણાંક એક્સ લેશે અને વાય અંતિમ વસ્તુ તમે પાછા માંગો છો અનુલક્ષે છે. (1 - એક્સ), 2 * વાય તેથી તો પછી આ તમે બાર પાછો જઈ રહ્યાં છો. જેથી ફક્ત એક ઉચ્ચ સ્તર તમે કેવી રીતે વસ્તુઓ પૂંછડી ફરી યાદ આવવું કરવા પરિવર્તિત થાય છે. પરંતુ વધારાની દલીલ - અને પછી અંતે જ્યારે તમે તમારી આધાર કેસ પહોંચે છે, તમે માત્ર વાય પાછા કારણ કે તમે સમગ્ર સમય કરવામાં પરત કિંમત છે કે જે તમે કરવા માંગો છો એકઠું કર્યું છે. તમે પ્રકારની તેને આવી છે iteratively કરી પરંતુ ફરી યાદ આવવું કોલોની મદદથી. પ્રશ્નો? નિર્દેશક અંકગણિત વિશે કદાચ જ્યારે શબ્દમાળાઓ મદદથી જેમ, [વિદ્યાર્થી]. શ્યોર. >> પોઇન્ટર અંકગણિત. જ્યારે શબ્દમાળાઓ મદદથી તેને સરળ છે કારણ કે શબ્દમાળાઓ ઘરનાં પરચૂરણ કામો તારાઓ છે, અક્ષરો કાયમ અને હંમેશા એક બાઈટ છે, અને તેથી નિર્દેશક અંકગણિત નિયમિત અંકગણિત જ્યારે તમે શબ્દમાળાઓ સાથે કામ કરીએ છીએ સમકક્ષ છે. ચાલો માત્ર કોલસો બનાવો ઓ * = "હેલો" કહે છે. તેથી અમે મેમરીમાં બ્લોક હોય છે. તે 6 બાઇટ્સ જરૂર છે કારણ કે તમે હંમેશા નલ ટર્મીનેટર જરૂર છે. અને કોલસો બનાવો * ઓ આ એરે શરૂઆતમાં નિર્દેશ રહ્યું છે. તેથી ઓ ત્યાં નિર્દેશ કરે છે. હવે, આ મૂળભૂત કેવી રીતે કોઈપણ એરે કામ કરે છે, પછી ભલેને તે malloc દ્વારા અથવા તે સ્ટેક પર છે કે નહીં તે વળતર હતી. કોઈપણ એરે મૂળભૂત એરે શરૂઆત કરવા માટે નિર્દેશક છે, અને પછી કોઈપણ એરે કામગીરી, કોઈપણ ઈન્ડેક્સીંગ, ફક્ત કે જે એરે જવા છે ચોક્કસ ઓફસેટ. તેથી જ્યારે હું [3] ઓ કંઈક કહેવું છે; આ s પર રહ્યું છે અને સાઇન 3 અક્ષરો ગણતરી તેથી ઓ [3] અમે 0 હોય,, 1, 2, 3, તેથી ઓ [3] આ l નો સંદર્ભ લો રહ્યું છે. [વિદ્યાર્થી] અને અમે + s 3 કરી અને પછી કૌંસ સ્ટાર દ્વારા જ કિંમત સુધી પહોંચી શકે છે? હા. આ * (ઓ + + 3) સમકક્ષ છે; અને તે કાયમ માટે અને હંમેશા સમકક્ષ કોઈ બાબત તમે શું છે. તમને ક્યારેય કૌંસ વાક્યરચના વાપરે છે. તમે હંમેશા * વાક્યરચના (3 + s) નો ઉપયોગ કરી શકો છો. લોકો કૌંસ વાક્યરચના માંગો છતાં વલણ ધરાવે છે. [વિદ્યાર્થી] તેથી તમામ એરે વાસ્તવમાં માત્ર છે પોઇન્ટર. ત્યાં થોડો તફાવત એ છે કે જ્યારે હું કહું છું પૂર્ણાંક x [4]; >> [વિદ્યાર્થી] શું દર્શાવે છે કે મેમરી બનાવી છે? [બોડેન] તે માટે સ્ટેક પર 4 ints બનાવો, જેથી 16 બાઇટ્સ એકંદર રહ્યું છે. તે સ્ટેક પર 16 બાઇટ્સ બનાવી રહ્યું છે. એક્સ ગમે ત્યાં નથી સંગ્રહાયેલ છે. તે માત્ર એક વસ્તુ શરૂઆત ઉલ્લેખ પ્રતીક છે. કારણ કે તમે આ કાર્ય ની અંદર એરે જાહેર આ કમ્પાઈલર શું રહ્યું છે ફક્ત ચલ x ની તમામ ઘટકોને બદલવા છે જ્યાં તે માટે આ 16 બાઇટ્સ મૂકી પસંદ કરો થયું છે. તે ચાર રચે છે * s ની સાથે નથી કારણ કે ઓ એક વાસ્તવિક નિર્દેશક છે. તે પછી અન્ય વસ્તુઓ માટે નિર્દેશ મફત છે. એક્સ સતત છે. તમે તેને અલગ એરે માટે બિંદુ હોઈ શકે નહિં. >> [વિદ્યાર્થી] ઠીક. પરંતુ આ વિચાર, આ ઈન્ડેક્સીંગ, એ જ અનુલક્ષીને છે કે તે પરંપરાગત એરે છે અથવા જો તે કંઈક અથવા જો એક નિર્દેશક છે તે malloced એરે માટે નિર્દેશક છે. અને હકીકતમાં, તે આવું સમકક્ષ કે જે પણ આ જ વાત છે. તે વાસ્તવમાં માત્ર ભાષાંતર શું કૌંસ ની અંદર છે અને શું બ્રેકેટ્સ બાકી છે, તેમને ઉમેરે મળીને, અને dereferences. તેથી આ માત્ર તરીકે માન્ય છે * (ઓ + + 3) અથવા ઓ. [3] [વિદ્યાર્થી] તમે 2-પરિમાણીય એરે માટે પોઇન્ટ પોઇન્ટર હોય શકે છે? તે સખત હોય છે. પરંપરાગત રીતે, નં. એક એરે 2-પરિમાણીય માત્ર કેટલાક અનુકૂળ સિન્ટેક્ષ સાથે એરે 1-પરિમાણીય છે કારણ કે જ્યારે હું કહી પૂર્ણાંક x [3] [3], આ ખરેખર માત્ર 9 કિંમતો સાથે 1 એરે છે. અને તેથી જ્યારે હું અનુક્રમણિકા, પણ કમ્પાઇલર જાણે હું શું અર્થ થાય. જો હું કહું છું x [1] [2] છે, તે જાણે છે હું બીજી પંક્તિ પર જાઓ કરવા માંગો છો, તેથી તે પ્રથમ 3 અવગણો ચાલી રહ્યું છે, અને પછી તે બીજી વસ્તુ કે, તેથી તે આ એક બનશે માંગે છે. પરંતુ તે હજુ પણ માત્ર એક એરે એક પરિમાણીય છે. અને તેથી જો હું એરે માટે નિર્દેશક સોંપવા માગતા હતા, હું એમ કહીશ પૂર્ણાંક * પૃષ્ઠ = x; એક્સ પ્રકાર માત્ર છે - તે x ની રફ કહેતા પ્રકાર છે કારણ કે તે માત્ર એક પ્રતીક છે અને તે એક વાસ્તવિક ચલ નથી, પરંતુ તે માત્ર પૂર્ણાંક * છે. એક્સ ફક્ત આ શરૂઆત કરવા માટે નિર્દેશક છે. >> [વિદ્યાર્થી] ઠીક. અને તેથી હું [2] [1] ઍક્સેસ કરી શકશો નહીં. મને લાગે છે કે ત્યાં એક નિર્દેશક જાહેર માટે ખાસ વાક્યરચના છે, પૂર્ણાંક જેવા હાસ્યાસ્પદ કંઈક (* [પૃ. - સંપૂર્ણપણે હાસ્યાસ્પદ હું પણ ખબર નથી. પરંતુ ત્યાં કૌંસ અને વસ્તુઓ સાથે જેમ પોઇંટરો જાહેર માટે વાક્યરચના છે. એ પણ છે કે જે તમને ન દો શકે છે. હું પાછા કંઈક છે જે મને સત્ય કહેવું કરશે જોવા શકે છે. હું તેના માટે પાછળથી જુઓ, તો ત્યાં બિંદુ માટે વાક્યરચના છે. પરંતુ તમે તેને ક્યારેય દેખાશે નહીં. અને પણ સિન્ટેક્ષ જેથી પ્રાચીન કે જો તમે તેને વાપરવા માટે, લોકો baffled આવશે. બહુપરીમાણીય એરે ખૂબ જ ઓછી છે, કારણ કે તે છે. તમે ખૂબ ખૂબ - વેલ, જો તમે મેટ્રિક્સ વસ્તુઓ કરી રહ્યા છીએ તે ભાગ્યે જ ન ચાલી રહ્યું છે, પરંતુ સી તમે ભાગ્યે જ બહુપરીમાણીય એરે ઉપયોગ કરી રહ્યા છીએ. યાહ. >> [વિદ્યાર્થી] હવે કહો કે તમે ખરેખર લાંબા એરે હોય છે. તેથી વર્ચ્યુઅલ મેમરી તેને તમામ સતત પ્રયત્ન દેખાય છે, જમણી એકબીજા આગામી તત્વો જેમ, પરંતુ ભૌતિક મેમરી માં, તે શક્ય છે કે માટે કરવામાં વિભાજિત હશે? હા. >> વર્ચ્યુઅલ મેમરી કેવી રીતે કામ કરે છે તે માત્ર અલગ - ફાળવણી એકમ એક પાનું, કે જે 4 કિલોબાઇટ હોઇ શકે છે, અને તેથી જ્યારે પ્રક્રિયા કહે છે, હેય, હું આ મેમરી વાપરવા માંગો, ઓપરેટિંગ સિસ્ટમ તેને મેમરી થોડો બ્લોક માટે 4 કિલોબાઇટ ફાળવી રહ્યું છે. જો તમે માત્ર મેમરીના સમગ્ર બ્લોક એક થોડો બાઇટ વાપરવા માટે, ઓપરેટિંગ સિસ્ટમ માટે તે સંપૂર્ણ 4 કિલોબાઇટ આપી રહ્યું છે. તેથી તેનો અર્થ શું છે હું કરી શકે છે - આપણે કહેવું કે આ મારું સ્ટેક છે. આ સ્ટેક અલગ કરી શકાય છે. મારા સ્ટેક મેગાબાઇટ્સ અને મેગાબાઇટ્સ હોઈ શકે છે. મારા સ્ટેક વિશાળ હોઈ શકે છે. પરંતુ સ્ટેક પોતે વ્યક્તિગત પાનાંઓમાંથી વિભાજિત કરી શકાય છે, જે દો જો આપણે અહીં પર જોવા કહો કે આ અમારી રેમ છે, જો હું RAM ની 2 ગીગાબાઇટ્સ છે, આ મારા RAM ના zeroth બાઇટ જેવી વાસ્તવિક સરનામા 0 છે, અને આ 2 તમામ માર્ગ ગીગાબાઇટ્સ નીચે અહીં છે. તેથી આ પાનું અહીં પર આ બ્લોક અનુલક્ષે શકે છે. આ પાનું અહીં પર આ બ્લોક અનુલક્ષે શકે છે. આ એક આ અહીં ઉપર એક અનુલક્ષે શકે છે. તેથી ઓપરેટિંગ સિસ્ટમ માટે ભૌતિક મેમરી સોંપણી મફત છે કોઈપણ વ્યક્તિગત આપખુદ પાનું છે. અને તે અર્થ એ થાય કે જો આ સરહદ ઝાકઝમાળ સ્ટ્રેડલ થાય છે, ઝાકઝમાળ માટે આ છોડી થાય છે અને એક પાનું આ હુકમ અધિકાર, પછી તે એરે માટે ભૌતિક મેમરી માં વિભાજિત કરવામાં રહ્યું છે. અને પછી જ્યારે તમે કાર્યક્રમ બહાર નીકળવા, જ્યારે પ્રક્રિયા સમાપ્ત થાય છે, આ જોડણીઓની ભૂંસી વિચાર કરો અને પછી તે અન્ય વસ્તુઓ માટે આ થોડું બ્લોક્સ ઉપયોગ મફત છે. વધુ પ્રશ્નો છે? [વિદ્યાર્થી] આ નિર્દેશક અંકગણિત. >> ઓહ હા. શબ્દમાળાઓ સરળ હતા, પરંતુ ints કંઈક જોઈ, તેથી માટે પૂર્ણાંક x [4]; આ ઝાકઝમાળ છે કે તે 4 પૂર્ણાંકો એક malloced એરે માટે નિર્દેશક છે કે શું, તે જ રીતે સારવાર કરી રહ્યું છે. [વિદ્યાર્થી] તેથી એરે આ ઢગલો પર હોય છે? [બોડેન] એરેમાં આ ઢગલો પર નથી. >> [વિદ્યાર્થી] ઓહ. [બોડેન] એરે આ પ્રકારની સ્ટેક પર હોઇ શકે છે જ્યાં સુધી તમે તેને જાહેર - વૈશ્વિક ચલો ઉપેક્ષા કરે છે. શું વૈશ્વિક ચલો ઉપયોગ કરશો નહીં. અંદર કાર્ય હું કહી ના પૂર્ણાંક x [4]; તે આ એરે માટે સ્ટેક પર બ્લોક 4-પૂર્ણાંક બનાવી રહ્યું છે. પરંતુ આ malloc (4 * (પૂર્ણાંક) sizeof); માટે ઢગલો પર જાઓ રહ્યું છે. પરંતુ આ બિંદુ પછી હું ખૂબ ખૂબ જ રીતે એક્સ અને પૃષ્ઠ ઉપયોગ કરી શકો છો, અપવાદોને બાદ કરતાં મેં કહ્યું વિશે પહેલાં તમે પૃષ્ઠ પુનઃસોંપણી શકે કરતાં અન્ય. પારિભાષિક રીતે, તેમના કદ કંઈક અલગ હોય છે, પરંતુ તે સંપૂર્ણપણે અપ્રસ્તુત છે. તમે તેમના માપ ખરેખર ક્યારેય ઉપયોગ કરે છે. આ પૃષ્ઠ હું કહી શકે પૃષ્ઠ [3] = 2; અથવા x [3] = 2; તમે તેમને બરાબર એ જ રીતે ઉપયોગ કરી શકો છો. તેથી નિર્દેશક હવે અંકગણિત - હા. [વિદ્યાર્થી] કરશો તો તમને પૃષ્ઠ * આમ જો તમે કૌંસમાં નથી? કૌંસમાં ગર્ભિત ડિરેફરન્સ છે. ઠીક છે. >> ખરેખર, પણ તમે સાથે કહી રહ્યાં છે શું તમે બહુપરીમાણીય એરે મેળવી શકો છો પોઇન્ટર સાથે, તમે શું કરી શકો છો કંઈક જેવું છે, ચાલો, કહો પૂર્ણાંક ** પીપી malloc = (sizeof (પૂર્ણાંક *) * 5); હું હમણાં જ તે બધા બહાર પ્રથમ લખી શકશો. હું એક કે જે માંગતા ન હતાં. ઠીક છે. શું હું અહીં કર્યું છે - તે પીપી [i] પ્રયત્ન કરીશું. તેથી પીપી એક નિર્દેશક માટે નિર્દેશક છે. તમે પીપી mallocing કરી રહ્યા છીએ 5 પૂર્ણાંક તારાઓનો એક એરે માટે નિર્દેશ કરે છે. તેથી મેમરીમાં તમે સ્ટેક પૃષ્ઠ પર તે 5 બ્લોકો જે બધા છે પોતાને પોઇંટરો ઝાકઝમાળ નિર્દેશિત કરવા માટે ચાલી રહ્યું છે. અને પછી હું નીચે અહીં malloc જ્યારે, હું malloc કે તે વ્યક્તિગત પોઇંટરો દરેક આ ઢગલો પર 4 બાઇટ્સ એક અલગ બ્લોક નિર્દેશિત કરવા માટે કરીશું. તેથી 4 બાઇટ્સ આ નિર્દેશ કરે છે. અને અલગ 4 બાઇટ્સ આ એક નિર્દેશ કરે છે. અને તે બધા જ પોતાના 4 બાઇટ્સ માટે નિર્દેશ કરે છે. આ મારા બહુપરીમાણીય વસ્તુઓ કરવાનું એક રસ્તો આપે છે. હું પીપી [3] [4], પરંતુ હવે આ જ વસ્તુ નથી તરીકે બહુપરીમાણીય એરે કહેવું શકે કારણ કે બહુપરીમાણીય એરે તે [3] [4] એક એક્સ એરે માં ઓફસેટ એક હતી. અનુવાદ આ dereferences, પૃષ્ઠ ત્રીજા અનુક્રમણિકા ઍક્સેસ, પછી dereferences કે અને વપરાશની - 4 અમાન્ય હશે - બીજા ઇન્ડેક્સ. જ્યારે જ્યારે અમે હતા પૂર્ણાંક x [3] [4] તરીકે બહુપરીમાણીય એરે પહેલા અને જ્યારે તમે કૌંસ ડબલ તે ખરેખર માત્ર એક જ ડિરેફરન્સ છે, તમે એક નિર્દેશક અનુસરી રહ્યાં છો અને પછી ઓફસેટ, આ ખરેખર 2D સંદર્ભો. તમે 2 અલગ પોઇંટરો અનુસરો. તેથી આ પણ ટેકનિકલી પરવાનગી આપે છે તમે બહુપરીમાણીય એરે હોય જ્યાં દરેક વ્યક્તિગત એરે વિવિધ કદના છે. મને લાગે છે જેગ્ડ બહુપરીમાણીય એરે છે તે કહેવાય છે ખરેખર પ્રથમ વસ્તુ કંઈક છે જે 10 તત્વો છે નિર્દેશ કરી શકે છે કારણ કે, બીજી વસ્તુ કંઈક કે જે 100 ઘટકો હોય છે માટે નિર્દેશ કરી શકે છે. [વિદ્યાર્થી] ત્યાં પોઇન્ટર તમે કરી શકો છો સંખ્યા પર કોઇ મર્યાદા છે અન્ય પોઇંટરો તરફ? >> નંબર તમે ***** પૂર્ણાંક પૃષ્ઠ હોઈ શકે છે. પાછા નિર્દેશક અંકગણિત - >> [વિદ્યાર્થી] ઓહ. >> યાહ. [વિદ્યાર્થી] જો હું પૂર્ણાંક *** પૃષ્ઠ છે અને તે પછી હું dereferencing કરવા અને હું કહી પૃષ્ઠ * આ કિંમત સમકક્ષ હોય છે, છે તે માત્ર dereferencing 1 નું સ્તર કરવા જાઉં? હા. >> તેથી જો હું વસ્તુ છે કે છેલ્લા નિર્દેશક તરફ સંકેત છે ઍક્સેસ કરવા માંગો છો - પછી તમે *** પૃષ્ઠ નથી. ઠીક છે. >> તેથી આ 1 બ્લોક, બીજો બ્લોક પોઇન્ટ, અન્ય બ્લોક માટે પોઇન્ટ પૃષ્ઠ પોઇન્ટ છે. પછી જો તમે * શું પૃષ્ઠ = કંઈક બીજું, પછી તમે આ બદલી રહ્યા હોય હવે એક અલગ બ્લોક માટે નિર્દેશ કરે છે. ઠીક છે. >> [બોડેન] અને જો આ malloced હતા, પછી તમે હવે મેમરી લીક કર્યો છે જ્યાં સુધી તમે આ વિવિધ સંદર્ભો છે થવું કારણ કે તમે પાછા તે ચામાં ન મળી કે જે તમે હમણાં જ ફેંકી દીધો શકો છો. પોઇન્ટર અંકગણિત. પૂર્ણાંક x [4]; માટે 4 પૂર્ણાંકો ઝાકઝમાળ ફાળવી રહ્યું છે જ્યાં એક્સ માટે એરે શરૂઆતમાં નિર્દેશ રહ્યું છે. તેથી જ્યારે હું x [1] કંઈક કહેવું; હું તે એરે બીજા પૂર્ણાંક પર જવાની કરવા માંગો છો, જે આ એક હશે. પરંતુ ખરેખર, કે જે એરે માં 4 બાઇટ્સ છે કારણ કે આ પૂર્ણાંક અપ 4 બાઇટ્સ લે છે. તેથી 1 ઓફસેટ એક ખરેખર મતલબ 1 ઓફસેટ સમય ગમે તે એરે પ્રકાર છે માપ. આ પૂર્ણાંકો ઝાકઝમાળ છે, તેથી તે પૂર્ણાંક 1 નું વખત કદ કરી જાણે છે જ્યારે તે ઓફસેટ કરવા માંગે છે. અન્ય વાક્યરચના. યાદ રાખો કે આ * (x + 1) જેટલી છે; હું જ્યારે નિર્દેશક + 1, કે વળતર શું સરનામા કે નિર્દેશક સ્ટોર છે કહેવું વત્તા 1 વખત નિર્દેશક પ્રકાર માપ. તેથી જો એક્સ ox100 =, પછી x + 1 = ox104. અને તમે આ દુરુપયોગ અને કંઈક કહી શકો ઘરનાં પરચૂરણ કામો જેવા * કેચ = (કોલસો *) એક્સ; અને હવે સી એક્સ તરીકે જ સરનામા હશે છે. સી ox100 સમાન હોવું રહ્યું છે, પરંતુ કેચ + 1 માટે ox101 સમાન હોવું રહ્યું છે કારણ કે નિર્દેશક અંકગણિત પોઇન્ટર પ્રકાર કે જે તમે ઉમેરવા છે તેના પર આધાર રાખે છે. જેથી કેચ + 1, તે કેચ પર જુએ છે, તે ચાર રચે છે નિર્દેશક છે, તેથી તે માટે ઘરનાં પરચૂરણ કામો ની 1 વખત કદ ઉમેરવા ચાલી રહ્યું છે, જે હંમેશા માટે 1 પ્રયત્ન રહ્યું છે, જેથી તમે 101 વિચાર, જ્યારે જો હું એક્સ, જે પણ હજી પણ 100 કરવા માટે, એક્સ + 1 માટે 104 પ્રયત્ન રહ્યું છે. [વિદ્યાર્થી] તમે C + + માટે ક્રમમાં 1 કરીને તમારા નિર્દેશક આગળ ઉપયોગ કરી શકું? હા, તમે આ કરી શકો છો. તમે કે એક્સ સાથે નથી કારણ કે એક્સ માત્ર એક પ્રતીક છે, તો તે સતત છે; તમે એક્સ બદલી શકતા નથી. પરંતુ સી માત્ર એક નિર્દેશક બને છે, જેથી C + + સંપૂર્ણપણે માન્ય છે અને તેને 1 દ્વારા વધારો થશે. જો કો માત્ર પૂર્ણાંક * હતા, પછી C + + 104 આવશે. + + નિર્દેશક અંકગણિત કરે છે જેમ કેચ + 1 નિર્દેશક અંકગણિત હોય કરવામાં આવશે. આ વાસ્તવમાં મર્જ સૉર્ટ જેવી વસ્તુઓ એક કેવી રીતે ઘણો છે - તેના બદલે વસ્તુઓ નકલો બનાવવા, તમે તેના બદલે પસાર કરી શકો છો - ગમે જો હું એરે આ અડધી પસાર કરવા માગે છે - ચાલો આ અંગેના કેટલાક ભૂંસવું. હવે કહો કે હું કાર્ય માં એરે આ બાજુ પસાર કરવા માંગતા હતા. હું શું કે કાર્ય પસાર થશે? જો હું એક્સ પસાર કરવા માટે, હું આ સરનામા પસાર છું. પરંતુ હું આ ખાસ સરનામા પસાર કરવા માંગો છો. તેથી હું શું પસાર કરવું જોઈએ? [વિદ્યાર્થી] પોઇન્ટર + 2? [બોડેન] તેથી એક્સ + 2. હા. કે આ સરનામાં જ હશે. તમે પણ ખૂબ વારંવાર તરીકે તે જોશો x [2] અને પછી એ સરનામું. જેથી તમે તેનો સરનામા લાગી કારણ કે કૌંસ ગર્ભિત ડિરેફરન્સ છે જરૂર છે. x [2] આ કિંમત છે કે જે આ બૉક્સમાં છે સંદર્ભ લે છે, અને પછી તમે તે બોક્સની સરનામા માંગો છો, જેથી તમે કહેવું અને એક્સ. [2] જેથી મર્જ સૉર્ટ કંઈક જ્યાં તમે કંઈક કરવા માટે અડધા યાદી કેવી રીતે પસાર કરવા માંગતા હોય છે તમે ખરેખર માત્ર પસાર & x [2] હાલમાં, અને જ્યાં સુધી ફરી યાદ આવવું કોલ ચિંતા છે, મારી નવી એરે ત્યાં શરૂ થાય છે. છેલ્લા મિનિટ પ્રશ્નો. [વિદ્યાર્થી] જો અમે & "અને" નું ચિહ્ન મૂકી અથવા તો - એટલે કે શું કહેવાય? >> સ્ટાર? [વિદ્યાર્થી] નક્ષત્ર. >> ટેક્નિકલ, ડિરેફરન્સ ઓપરેટર છે, પરંતુ - >> [વિદ્યાર્થી] ડિરેફરન્સ. જો આપણે એક તારો અથવા & "અને" નું ચિહ્ન મૂકી નથી, જો હું માત્ર વાય કહેવું થાય છે = x અને x એક નિર્દેશક છે? વાય પ્રકાર શું છે? >> [વિદ્યાર્થી] હું માત્ર તે 2 નિર્દેશક કહેવું પડશે. તેથી જો તમે માત્ર કહેવા વાય = x, હવે એક્સ અને વાય બિંદુ જ વસ્તુ છે. >> જ વસ્તુ [વિદ્યાર્થી] બિંદુ. અને જો એક્સ પૂર્ણાંક નિર્દેશક છે? >> તે કારણ કે તમે પોઇંટરો નથી સોંપી શકે ફરિયાદ કરશે. [વિદ્યાર્થી] ઠીક. કે પોઇંટરો યાદ રાખો, તેમ છતાં અમે તેમને તીરો તરીકે આલેખન ખરેખર તમામ તેઓ દુકાન - પૂર્ણાંક * એક્સ - ખરેખર બધા એક્સ સ્ટોર કરે છે ox100 કંઈક છે, જે અમે 100 અંતે સંગ્રહિત બ્લોક તરફ ઇશારો તરીકે પ્રસ્તુત થાય છે. તેથી જ્યારે હું કહું છું પૂર્ણાંક * વાય = x; હું માત્ર વાય માં છું ox100 નકલ, જે અમે માત્ર વાય તરીકે પ્રતિનિધિત્વ જઈ રહ્યાં છો, પણ ox100 માટે નિર્દેશ કરતી હશે. અને જો હું કહું છું પૂર્ણાંક હું = (પૂર્ણાંક) એક્સ; પછી હું સંગ્રહવા માટે ગમે ox100 મૂલ્ય છે રહ્યું છે અંદર હોય, પરંતુ હવે તે એક નિર્દેશક બદલે પૂર્ણાંક તરીકે અર્થઘટન કરી રહ્યું છે. પરંતુ તમે કાસ્ટ જરૂર અથવા અન્ય તે ફરિયાદ કરશે. [વિદ્યાર્થી] તેથી તમે ભૂમિકા અર્થ નથી - છે તે વાય ઓફ એક્સ અથવા કાસ્ટિંગ પૂર્ણાંક ઓફ પૂર્ણાંક નિર્ણાયક હશે? [બોડેન] શું? [વિદ્યાર્થી] ઠીક. આ કૌંસ પછી ત્યાં જે x અથવા ત્યાં સારું પ્રયત્ન રહ્યું છે? [બોડેન] ક્યાં. એક્સ અને વાય સમકક્ષ હોય છે. >> [વિદ્યાર્થી] ઠીક. કારણ કે તે બંને પોઇંટરો છો. >> યાહ. [વિદ્યાર્થી] તેથી તે પૂર્ણાંક ફોર્મ માં હેક્સાડેસિમલ 100 સંગ્રહવા માંગો છો? >> [બોડેન] યાહ. પરંતુ ગમે તે નિર્દેશ મૂલ્ય નથી. [બોડેન] યાહ. >> [વિદ્યાર્થી] તેથી માત્ર પૂર્ણાંક ફોર્મ માં સરનામું. ઠીક છે. [બોડેન] જો તમે કેટલાક વિચિત્ર કારણોસર કરવા માગે છે, તમે સંપૂર્ણપણે પોઇન્ટર સાથે વ્યવહાર અને શકે પૂર્ણાંકો સાથે ક્યારેય વ્યવહાર અને માત્ર પૂર્ણાંક * x = 0 જેવા છે. પછી તમે ખરેખર એક વખત નિર્દેશક અંકગણિત થઈ રહ્યું શરૂ થાય છે ગુંચવણ ના થવી રહ્યા છીએ. તેથી નંબરો છે કે તેઓ સ્ટોર અર્થહીન છે. તે ફક્ત તમે કેવી રીતે અંત તેમને ઈન્ટરપ્રીટ. તેથી હું પૂર્ણાંક * ના ox100 પૂર્ણાંક પર નકલ મફત છું, કદાચ ન કાઢવા માટે અંતે yelled કરો જઈને you're - અને હું સોંપી મફત છું - હું (પૂર્ણાંક *) આ મનસ્વી પૂર્ણાંક * માં ox1234 કંઈક સોંપી મફત છું. તેથી ox123 છે જેમ માન્ય મેમરી સરનામા તરીકે વાય & છે. & પિ કંઈક કે જે ઘટનાએ છે ox123 પરત થાય છે. [વિદ્યાર્થી] કે જે ખરેખર ઠંડી માટે હેક્સાડેસિમલ માંથી અક્ષાંશ ફોર્મ પર જાઓ માર્ગ થશે, જો તમે એક નિર્દેશક હોય ગમે અને તમે તેને પૂર્ણાંક તરીકે ભૂમિકા? [બોડેન] તમે ખરેખર માત્ર printf જેમ ઉપયોગ કરીને છાપી શકો છો. હવે કહો કે હું પૂર્ણાંક વાય = 100 હોય છે. તેથી printf (% d \ n - તરીકે તમે પહેલેથી જ ખબર હોવી જોઇએ - print કે પૂર્ણાંક,% એક્સ. અમે હમણાં જ તે હેક્સાડેસિમલ તરીકે છાપી પડશે. તેથી નિર્દેશક હેક્સાડેસિમલ તરીકે સંગ્રહિત થાય છે, અને પૂર્ણાંક અક્ષાંશ તરીકે સંગ્રહાયેલ છે. બધું દ્વિસંગી તરીકે સંગ્રહાયેલ છે. તે માત્ર છે કે અમે હેક્સાડેસિમલ તરીકે પોઇંટરો બતાવવા વલણ ધરાવે છે કારણ કે અમે આ 4 બાઇટ બ્લોકમાં વસ્તુઓ વિચારો, અને મેમરી સરનામાંઓ માટે પરિચિત હોય છે. માફ જેમ, જો તે બીએફ સાથે શરૂ થાય છે, પછી તે સ્ટેક પર બને છે. તેથી તે માત્ર હેક્સાડેસિમલ તરીકે પોઇંટરો અમારી અર્થઘટન છે. ઠીક છે. કોઈપણ છેલ્લા પ્રશ્નો છે? હું અહીં થોડી હોઇ જો પછી તમે જે કંઈપણ પડશે. અને તે કે ઓવરને છે. [વિદ્યાર્થી] યે! [વધાવી] [CS50.TV]