[Powered by Google Translate] [4 سیکشن - مزید آرام دہ اور پرسکون] [روب Bowden - ہارورڈ یونیورسٹی] یہ [CS50 ہے. CS50.TV] - ہم نے ایک گئے تمام سوالات کے کل ہے، اگر تم لوگوں کو یہ نہیں پتہ تھا. یہ سب کچھ آپ کو کلاس میں دیکھا جا سکتا ہے یا کلاس میں دیکھا جانا چاہئے پر بنیادی طور پر ہے. یہ اشارہ بھی شامل ہے، اگرچہ انہوں نے حال ہی موضوع ہیں. آپ کو ان میں سے اعلی سطح پر کم از کم سمجھنا چاہیئے. کوئی بھی چیز جو کلاس میں گیا تھا کہ آپ کو گئے تمام سوالات کے لئے سمجھنا چاہئے. اگر ایسا ہے تو آپ کو ان پر سوالات ہیں، تم ان کے اب پوچھ سکتے ہیں. لیکن یہ ایک بہت ہی طالب علم کی قیادت میں اجلاس میں ہونا کہاں جا رہے ہو تم لوگ سوال پوچھتے ہے، تو امید ہے کہ لوگوں نے یہ سوال ہے. کیا کوئی سوال ہے؟ جی ہاں. >> [طالب علم] اشارہ آپ کے دوبارہ جا سکتے ہیں؟ میں اشارہ پر جائیں گے. اپنے تمام متغیرات میں سے ضروری یاد میں رہتے ہیں، لیکن عام طور پر تم نے اس کے بارے میں فکر مت کرو اور تم صرف کا کہنا ہے کہ X 2 + Y 3 + اور سنکلک باہر اعداد و شمار چیزیں کہاں آپ کے لئے رہ رہے ہیں. ایک بار جب آپ اشارہ سے نمٹنے کے، کر رہے ہیں اور اب آپ کو واضح طور پر ان میموری پتوں کا استعمال کرتے ہوئے کر رہے ہیں. تو ایک ایک متغیر کبھی بھی کسی بھی وقت میں ایک پتے پر ہی زندہ رہے گا. اگر ہم پوائنٹر اعلان کرنا چاہتے ہیں، کس قسم کی طرح نظر آتے ہو رہا ہے؟ میں پوائنٹر P کا اعلان کرنا چاہتے ہیں. کس قسم کی طرح لگتی ہے؟ [طالب علم] int * P. >> جی ہاں. تو int * P. اور میں اسے کس طرح X کی طرف اشارہ ہے؟ >> [طالب علم] ایمپرسینڈ. [Bowden] تو ایمپرسینڈ لفظی آپریٹر کا پتہ کہا جاتا ہے. تو جب میں کہتا ہوں اور عمومی X متغیر x کی یاد ایڈریس ہو رہا ہے. تو اب میں پوائنٹر P ہے، اور کہیں بھی میں اپنے کوڈ میں پی * کا استعمال کر سکتے ہیں یا مجھے ایکس کا استعمال کرتے ہیں اور یہ بالکل وہی چیز ہو جائے گا کر سکتے ہیں. (P *). کیا کر رہی ہے؟ کہ ستارہ کا کیا مطلب ہے؟ [طالب علم] یہ اس نقطہ پر ایک قیمت کا مطلب ہے. >> جی ہاں. لہذا اگر ہم اس کی طرف دیکھتے ہیں، یہ بہت مفید ہو diagrams متوجہ کر سکتے ہیں اس x کے لیے ایک میموری کا چھوٹا باکس، جس سے 4 قیمت پر ہوتا ہے جہاں ہے، تو ہم پی کے لئے ایک میموری کا چھوٹا خانہ ہے، X P پوائنٹس، تو ہم ایکس پی سے ایک تیر اپنی طرف متوجہ. تو جب ہم کا کہنا ہے کہ * P ہم کہہ رہے ہیں باکس کہ پی رہے ہیں. سٹار تیر کی پیروی ہے اور اس کے بعد جو کچھ بھی آپ کو اس باکس کے ساتھ کرنا چاہتے ہیں وہیں. تو میں کہہ * P 7 = کر سکتے ہیں، اور یہ کہ باکس کہ x اور کہ 7 سے میں تبدیلی ہے. یا میں یہ کہنا سکتا ہے int Z = * P 2 *، یہ برامک ہے کیونکہ یہ ستارہ ستارہ،. ایک ستارہ P محولہ لقب ضبطی ہے، دوسرے ستارہ 2 کی طرف سے ضرب ہے. نوٹس میں کے ساتھ ساتھ ایکس کے ساتھ * P تبدیل کیا جا سکتا ہے. تم نے انہیں اسی طرح میں استعمال کر سکتے ہیں. اور پھر بعد میں ایک مکمل طور پر نئی چیز P نقطہ ہو سکتا ہے. میں صرف کہہ سکتے ہیں P = &z؛ تو اب X نہیں طویل پوائنٹس P، Z اشارہ ہے. اور کسی بھی وقت میں * P Z کر کے طور پر ایک ہی ہے. تو اس کے بارے میں مفید بات یہ ہے کہ ایک بار ہم افعال میں ہو رہی شروع. یہ بیکار کی طرح ہے کہ پوائنٹس پوائنٹر کچھ کرنے کا اعلان اور اس کے بعد آپ نے ابھی محولہ لقب ضبطی رہے ہیں آپ کو اصل متغیر جب استعمال کیا جا سکتا ہے کے ساتھ شروع کرنے کے لئے. لیکن جب آپ کے افعال میں ملتا ہے - تو ہم کا کہنا ہے کہ ہم نے کچھ تقریب، int FOO ہے، جو ایک پوائنٹر لیتا ہے اور صرف P * = 6 ہے. کی طرح ہم سویپ کے ساتھ پہلے دیکھا، آپ کو ایک مؤثر سویپ اور ایک علیحدہ تقریب نہیں کر سکتے صرف integers رہا ہے. کیونکہ C میں سب کچھ کو ہمیشہ قدر کی طرف سے گزر رہا ہے. اس وقت بھی جب آپ کو اشارہ گزر کر رہے ہیں آپ کو قدر کی طرف سے گزر رہے ہیں. یہ صرف اس لئے ہوتا ہے کہ ان اقدار میموری پتوں ہیں. تو جب میں کہتا ہوں (P) FOO، میں تقریب FOO میں پوائنٹر گزر رہا ہوں اور پھر FOO * 6 = P کر رہا ہے؛ تو اس تقریب کے اندر، P * X کے برابر ہے، لیکن میں اس تقریب کے اندر X استعمال نہیں کر سکتے ہیں کیونکہ یہ اس تقریب کے اندر اندر scoped نہیں ہے. * P = 6 ایک ہی راستہ ہے جس سے میں ایک اور تقریب کی طرف سے ایک مقامی متغیر تک رسائی حاصل کر سکتے ہیں ہے. یا، ویسے، اشارہ ایک ہی راستہ ہے جس سے میں ایک اور تقریب کی طرف سے ایک مقامی متغیر تک رسائی حاصل کر سکتے ہیں ہیں. [طالب علم] چلو، کا کہنا ہے کہ آپ پوائنٹر کو واپس کرنا چاہتا تھا. کہ تم کس طرح کرتے ہیں؟ int Y 3 = طرح کچھ میں [Bowden] پوائنٹر واپس، واپسی اور عمومی Y >> [طالب علم] جی ہاں. [Bowden] ٹھیک ہے. تمہیں ایسا نہیں کرنا چاہئے. یہ برا ہے. مجھے لگتا ہے کہ میں ان لیکچر سلائیڈوں میں دیکھا آپ کو میموری کی یہ پوری آریھ دیکھ کرنا شروع کر دیا یہاں جہاں آپ میموری کا پتہ مل گیا 0 ہے اور نیچے یہاں آپ میموری ایڈریس 4 32 gigs یا 2 ہے. تو پھر آپ کو کچھ سامان ہے اور کچھ سامان ہے اور پھر آپ اپنے اسٹیک اور آپ کو آپ کے ڈھیر، جس سے آپ صرف کے بارے میں سیکھ سکتے ہیں، بڑے کرنا شروع کر دیا ہے. [طالب علم] اسٹیک اوپر ڈھیر نہیں ہے؟ جی ہاں. ڈھیر سب سے اوپر ہے، ہے نہ؟ >> [طالب علم] ٹھیک ہے، وہ سب سے اوپر پر 0 رکھ دیا. [طالب علم] اوہ، وہ سب سے اوپر پر 0 رکھ دیا. >> [طالب علم] اوہ، ٹھیک ہے. ڈس کلیمر: کہیں بھی آپ CS50 کے ساتھ مل کر اسے اس طرح دیکھ کر جا رہے ہیں. >> [طالب علم] ٹھیک ہے. یہ صرف ہے آپ پہلی دفعہ جب stacks دیکھ رہے ہیں، پسند جب آپ اسٹیک تم آپس میں ایک دوسرے کے سب سے اوپر پر چیزیں stacking کے بارے میں سوچتے ہو کے بارے میں سوچتے. تو ہم کے ارد گرد اس تاکہ اسٹیک اسٹیک عام طور پر کریں گے کی طرح بڑھ رہی ہے پلٹائیں دیتے ہیں اسٹیک کے بجائے نیچے لٹکا ہے. >> [طالب علم] نہ ڈھیر تکنیکی بھی بڑھ اگرچہ؟ یہ پر انحصار کرتا ہے کیا آپ کا مطلب ہے کی طرف سے اضافہ ہے. اسٹیک اور ڈھیر ہمیشہ مخالف سمتوں میں اضافہ. ایک اسٹیک ہمیشہ احساس میں بڑھتی جا رہی ہے کہ یہ بڑا ہو رہا ہے کی طرف میں زیادہ میموری، پتے، اور ڈھیر نیچے بڑھ رہی ہے ہے کہ میں کم میموری پتوں کی طرف بڑھتی جا رہی ہے. تو سب سے اوپر 0 ہے اور نیچے اعلی میموری پتوں ہے. وہ دونوں صرف ہدایات کی مخالفت میں بڑھتے ہوئے کر رہے ہیں،. [طالب علم] میں صرف اس کا مطلب کیونکہ تم نے کہا تھا کہ تم نیچے اسٹیک ڈال کیونکہ یہ زیادہ بدیہی لگتا ہے کیونکہ اسٹیک کے لئے ڈھیر کے سب سے اوپر دیئے گئے شروع، ڈھیر بھی خود کے سب سے اوپر پر ہے، تو that's - >> جی ہاں. تم نے بھی بڑے اور بڑے ڈھیر کے بارے میں سوچتے ہیں، لیکن اسٹیک تو. تو اسٹیک ایک ہے کہ ہم نے اس قسم کی بڑے دکھانا چاہتے ہیں ہے. لیکن ہر جگہ آپ بصورت دیگر نظر آئے 0 ایڈریس پر سب سے اوپر ظاہر کی جا رہی ہے اور نیچے سب سے زیادہ میموری ایڈریس، تو یہ آپ کی میموری کا معمول ہے. کیا آپ کے پاس ایک سوال ہے؟ [طالب علم] کیا آپ ہمیں ڈھیر کے بارے میں مزید بتا سکتے ہیں؟ جی ہاں. میں ایک سیکنڈ میں مل جائے گا. سب سے پہلے، کیوں Y & واپس لوٹنے پر واپس جانے بری چیز ہے، اسٹیک پر آپ اسٹیک فریم جس کے افعال میں سے سب کی نمائندگی کرتے ہیں کا ایک گروپ ہے جس کو بلایا گیا ہے. گزشتہ چیزوں کو نظر انداز تو، آپ کے اسٹیک کے سب سے اوپر ہمیشہ اہم تقریب بننے جا رہا ہے کے بعد کہ پہلی تقریب ہے جو بلایا گیا ہے ہے. اور پھر جب آپ ایک اور فنکشن کال، اسٹیک نیچے بڑھ جا رہا ہے. ، تو اگر میں نے کچھ تقریب، FOO کہتے ہیں، اور یہ اس کے اپنے اسٹیک فریم ملتی ہے یہ کسی تقریب بار، کہہ سکتے ہیں، یہ اس کے اپنے اسٹیک فریم ہو جاتا ہے. اور بار پنراورتی ہو سکتا ہے اور یہ ہی کہہ سکتے ہیں کر سکتے ہیں، اور تاکہ دوسری بار کال کے اپنے اسٹیک فریم حاصل کرنے کے لئے کی جا رہی ہے. اور تو جو ان اسٹیک فریم میں جاتا ہے مقامی متغیرات میں سے سب ہیں اور تقریب دلائل کہ سب کو - کوئی بھی چیزیں ہیں جو مقامی طور پر اس تقریب scoped ہیں ان اسٹیک فریم میں ہیں. تو اس کا مطلب جب میں نے کہا کہ بار کی طرح کچھ ایک تقریب ہے، میں صرف ایک عددی اور اعلان اس کے بعد کہ عددی پوائنٹر واپس جا رہا ہوں. تو Y کہاں رہتا ہے؟ [طالب علم] Y بار میں رہتا ہے. >> [Bowden] جی ہاں. کہیں میموری کے اس چوک میں ایک littler مربع ہے کہ اس میں Y ہے ہے. جب میں اور Y واپس، میں میموری کا یہ چھوٹا سا بلاک پوائنٹر واپس آ رہا ہوں. لیکن اس وقت جب ایک تقریب کی واپسی، اس کے اسٹیک فریم popped اسٹیک ہو جاتا ہے. اور یہی وجہ ہے کہ اس نے اسٹیک کہتے ہیں. یہ اسٹیک آنکڑا ڈھانچہ کی طرح ہے، اگر آپ کو معلوم ہے کہ وہ کیا ہے. یا ٹرے کے اسٹیک کی طرح بھی ہمیشہ مثال ہے، اہم نیچے جانے کے لئے کی جا رہی ہے، تو پہلی تقریب میں تمہیں بعد میں فون اس کے سب سے اوپر پر جانے کے لئے کی جا رہی ہے، اور تم واپس اہم نہیں ہے جب تک کہ آپ تمام افعال جو بلایا گیا ہے سے واپس آ سکتے ہیں ہے جو کہ اس کے سب سے اوپر پر دے دیا گیا ہے. [طالب علم] تو اگر آپ نے اور عمومی Y کرنا، پیشگی نوٹس کے بغیر تبدیل کرنے کی اس قدر کے ساتھ مشروط ہے واپس. جی ہاں، it's - >> [طالب علم] یہ ادلیکھت ہو سکتا ہے. >> جی ہاں. یہ مکمل طور پر ہے - اگر آپ کی کوشش کرتے ہیں اور - یہ ایک int * بار بھی ہو کیونکہ یہ پوائنٹر واپس لوٹنے، تو اس کی واپسی کی قسم int * ہے. اگر آپ اس تقریب کی واپسی کی قیمت کو استعمال کرنے کے لئے کی کوشش کی، یہ جانچ رویہ ہے کیونکہ اس پوائنٹر خراب یاد کی طرف اشارہ ہے. >> [طالب علم] ٹھیک ہے. تو کیا ہوا اگر، مثال کے طور پر، آپ کا اعلان int * Y = malloc ((int) sizeof)؟ یہ بہتر ہے. جی ہاں. [طالب علم] ہم کس طرح کے بارے میں بات کی تھی جب ہم ہمارے ریسایکل بن چیزوں کو کھینچ کر لائیں. وہ اصل میں ختم نہیں کر رہے ہیں، ہم صرف ان کے اشارہ سے محروم ہے. تو ہم اس معاملے میں اصل قدر کرتے ہیں مٹانے یا یاد میں یہ اب بھی وہاں ہے؟ زیادہ تر حصے کے لئے، یہ اب بھی وہاں ہو رہا ہے. لیکن ہم کا کہنا ہے کہ ہم کسی دوسرے تقریب، باز کو فون پر ہو. باز یہاں پر اس کے اپنے اسٹیک فریم حاصل کرنے کے لئے کی جا رہی ہے. یہ اس چیز کے تمام overwriting جا رہا ہے، اور پھر اگر آپ کو بعد میں اور استعمال پوائنٹر کہ تم سے پہلے ملا کی کوشش کریں، یہ اسی کی قدر کرنے کا نہیں ہے. یہ صرف تبدیل کیونکہ آپ نے تقریب باز قرار دیا جا رہا ہے. [طالب علم] لیکن ہم نے ابھی تک تھا یہ نہیں کہ ہم 3 گے ملے گا؟ [Bowden] تمام امکانات میں، تم کروگے. لیکن تم نے اس پر اعتماد نہیں کر سکتے ہیں. C جانچ رویہ کہتے ہیں. [طالب علم] اوہ، یہ کرتا ہے. ٹھیک ہے. تو یہ جب آپ پوائنٹر کو واپس کرنا چاہتے ہیں، ہے جہاں malloc استعمال میں آتا ہے. اصل میں میں لکھ رہا ہوں صرف malloc واپس (3 * sizeof (int)). ہم ایک سیکنڈ میں malloc سے زیادہ جانے، لیکن گے malloc کے خیال ہے آپ کے مقامی متغیرات میں سے سب ہمیشہ اسٹیک پر جاؤ. کوئی بھی چیز جو malloced ہے ڈھیر پر جاتا ہے، اور یہ ڈھیر پر ہمیشہ کے لئے اور ہمیشہ رہے گا جب تک کہ آپ کو واضح طور پر یہ مفت ہے. تو اس کا مطلب یہ ہے کہ جب تم سے کچھ malloc، اس تقریب کی واپسی کے بعد سے بچنے کے لئے جا رہا ہے. [طالب علم] اس کے زندہ رہنے کے بعد پروگرام رک جاتا ہے چل رہا ہے؟ >> نمبر ٹھیک ہے، تو یہ وہاں تک پروگرام ہے سارا راستہ کیا چل رہا ہونے جا رہا ہے. >> جی ہاں. ہم کیا ہوتا ہے جب پروگرام رک جاتا ہے چل رہا ہوتا ہے تفصیلات جا سکتے ہیں. تم نے مجھے یاد دلانے کی ضرورت ہے، لیکن ہو سکتا ہے کہ مکمل طور پر ایک الگ بات ہے. [طالب علم] تو malloc پوائنٹر پیدا؟ >> جی ہاں. Malloc - >> [طالب علم] مجھے لگتا ہے کہ malloc میموری پوائنٹر کہ استعمال کر سکتے ہیں کا ایک بلاک designates. [Bowden] میں اس خاکہ کو دوبارہ کرنا چاہتا ہوں. >> [طالب علم] تو یہ فنکشن کام کرتا ہے، لیکن؟ [طالب علم] جی ہاں، malloc میموری کا ایک بلاک ہے کہ آپ استعمال کر سکتے ہیں designates، اور پھر یہ کہ میموری کے پہلے بلاک کا پتہ واپس. [Bowden] جی ہاں. تو جب آپ malloc، آپ میموری کے کچھ بلاک پکڑ رہے ہیں جو ڈھیر میں فی الحال ہے. اگر ڈھیر بہت چھوٹا ہے، تو ڈھیر صرف اضافہ ہو رہا ہے، اور یہ اس سمت میں اگتا ہے. تو چلو کا کہنا ہے کہ ڈھیر بہت چھوٹا ہے. پھر یہ تھوڑا سا اضافہ اور اس بلاک ہے جو صرف اضافہ ہوا پوائنٹر واپس کے بارے میں ہے. جب آپ مفت چیزیں، آپ کو ڈھیر میں مزید کمرے کر رہے ہیں، تو بعد میں malloc پر کال کہ میموری ہے کہ آپ نے پہلے آزاد کیا تھا دوبارہ استعمال کر سکتے ہیں. malloc اور مفت کے بارے میں اہم بات یہ ہے کہ یہ آپ کو مکمل کنٹرول دیتا ہے ان میموری بلاکس کی زندگی پر. عالمی متغیر ہمیشہ زندہ ہیں. مقامی متغیرات ان کے دائرہ کار کے اندر اندر زندہ ہیں. گھوبگھرالی منحنی خطوط وحدانی ماضی جاتے جیسے ہی مقامی متغیر مر چکے ہیں. Malloced میموری زندہ ہے جب تم اسے زندہ کرنا چاہتے ہیں اور اس کے بعد جاری کیا ہے جب تم نے اسے جاری رکھا جائے بتانا. وہ اصل میں صرف میموری کی 3 اقسام ہیں، واقعی. خودکار یاد داشت مینجمنٹ ہے، جس میں اسٹیک ہے. چیزیں آپ کے لئے خود کار طریقے سے ہو. جب آپ int ایکس کا کہنا ہے کہ، میموری int x کے لیے مختص کیا جاتا ہے. جب X گنجائش سے باہر جاتی ہے، میموری x کے لیے دوبارہ حاصل کیا جاتا ہے. پھر متحرک یاد داشت مینجمنٹ ہے، جس کا ہے جو malloc ہے ہے، جس کا ہے جب آپ کو کنٹرول ہے. آپ کو متحرک طور پر فیصلہ جب ياداشت اور چاہئے مختص نہیں رکھا جائے. جو اور پھر مستحکم ہے، کا مطلب صرف اتنا ہے کہ یہ ہمیشہ کے لئے رہتا ہے، جس کا ہے جو عالمی متغیر ہیں. انہوں نے یاد میں ہمیشہ ہیں. سوال؟ [طالب علم] آپ نے ابھی گھوبگھرالی منحنی خطوط وحدانی کا استعمال کرتے ہوئے کی طرف سے ایک بلاک کی وضاحت کر سکتا ہوں ہونے کی ضرورت نہیں ایک بیان یا اگر اس طرح تھوڑی دیر کا گوشوارہ یا کوئی کچھ؟ تم نے ایک تقریب میں ایک بلاک کی وضاحت، لیکن کر سکتے ہیں کہ گھوبگھرالی منحنی خطوط وحدانی بھی ہے. تو [طالب علم] آپ کو گھوبگھرالی منحنی خطوط وحدانی کی ایک بے ترتیب جوڑی کی طرح صرف اپنے کوڈ میں نہیں کر سکتے ہیں کہ مقامی متغیر ہے؟ >> جی ہاں، آپ یہ کر سکتے ہیں. int بار کے اندر ہم نے {int Y = 3؛} ہو سکتا ہے. وہ یہیں ہونا چاہئے. لیکن یہ مکمل طور پر int Y کے دائرہ کار کی وضاحت کرتا ہے. کہ دوسری گھوبگھرالی منحنی خطوط وحدانی کے بعد، Y اب نہیں رکھا جائے استعمال کیا جا سکتا ہے. آپ نے تقریبا کبھی نہیں کہا کہ ہے، تاہم. کیا ہوا جب ایک پروگرام ختم ہوتا ہے ہوتا ہے واپس ہو رہی ہے، جھوٹ ہے کہ ہم غلط فہمی / نصف کے لئے چیزوں کو آسان بنانے کی دے کی طرح ہے. ہم آپ کو بتاتے ہیں کہ آپ میموری جب مختص آپ اس متغیر کے لئے RAM میں سے کچھ حصہ آونٹیت کر رہے ہیں. لیکن آپ کو براہ راست نہیں کر رہے ہیں RAM آپ کے پروگراموں میں چھونے کبھی. اگر تمہیں اس کے بارے میں کیا سوچتے ہیں، میں کس طرح متوجہ کیا - اور اصل میں، اگر آپ GDB میں سے گزرنا تو آپ ایک ہی بات نظر آئے گا. کتنی بار آپ کو اپنے پروگرام یا کس پروگرام آپ چلا رہے ہیں چلاتے ہیں، قطع نظر اسٹیک ہمیشہ شروع کرنے کے لئے کی جا رہی ہے - آپ کو ہمیشہ پتہ oxbffff کچھ کے ارد گرد متغیر کو دیکھنے کے لئے جا رہے ہیں. یہ عام طور پر اس علاقے میں کہیں ہے. لیکن کس طرح ممکن ہے 2 پروگرام ایک ہی یاد اشارہ ہو سکتا ہے؟ [طالب علم] جہاں oxbfff RAM پر سمجھا جاتا ہے میں سے کچھ صوابدیدی عہدہ ہے ہے کہ جب تقریب میں بلایا گیا تھا کے لحاظ سے مختلف مقامات میں اصل میں ہو سکتا ہے. جی ہاں. مدت مجازی میموری ہے. خیال ہے کہ ہر ایک عمل ہے، ہر ایک پروگرام ہے کہ آپ کے کمپیوٹر پر چل رہا ہے اس کی اپنی ہے - مکمل طور پر آزاد ایڈریس اسپیس - 32 بٹیں فرض ہے. یہ پتے کی جگہ ہے. یہ اس کی اپنی مکمل طور پر آزاد 4 استعمال کرنے کے لئے گیگا ہے. لہذا اگر آپ کو 2 پروگراموں کے ساتھ ہی چلاتے ہیں، اس پروگرام خود 4 گیگا دیکھتا ہے، اس پروگرام خود 4 گیگا دیکھتا ہے، اور یہ اس پروگرام کے لئے dereference ناممکن پوائنٹر ہے اور اس پروگرام سے یاد کے ساتھ ختم. اور کیا مجازی میموری ہے عمل ایڈریس اسپیس سے میپنگ ہے RAM پر اصل باتیں. تو یہ آپ کے آپریٹنگ سسٹم پر ہے یہ جاننے کی، ہے، جب اس آدمی کو dereferences پوائنٹر oxbfff، کہ واقعی مطلب ہے کہ کہ وہ RAM 1000 بائٹ چاہتا ہے، جبکہ اگر یہ پروگرام dereferences oxbfff، وہ واقعی RAM 10000 بائٹ چاہتا ہے. وہ منمانے دور ہو سکتا ہے. یہ کسی ایک کے عمل کی ایڈریس اسپیس کے اندر اندر چیزوں کی بھی سچ ہے. تو جیسے ہی تمام 4 گیگا دیکھتا ہے، لیکن چلو کا کہنا ہے کہ - [طالب علم] ہر ایک عمل ہے - چلو کا کہنا ہے کہ آپ کو RAM میں سے صرف 4 گیگا بائٹ کے ساتھ ایک کمپیوٹر ہے. کیا ہر ایک کے عمل میں پوری 4 گیگا دیکھا ہے؟ >> جی ہاں. لیکن 4 گیگا اس کو دیکھتا ہے، ایک جھوٹ ہے. یہ صرف اس کا خیال ہے کہ یہ سب اس میموری ہے اس کی وجہ معلوم نہیں کسی دوسرے عمل موجود ہے. یہ صرف زیادہ سے زیادہ میموری استعمال کے طور پر یہ اصل میں ضرورت ہے. آپریٹنگ سسٹم کو اس عمل کو RAM دینا نہیں ہے اگر وہ اس پورے خطے میں کسی بھی یاد کا استعمال کرتے ہوئے نہیں ہے. والا یہ اس علاقے کے لئے یاد نہیں دے ہے. لیکن خیال یہ ہے کہ - میں کے بارے میں سوچ کی کوشش کر رہا ہوں - میں قياس کے بارے میں سوچ بھی نہیں کر سکتے. Analogies مشکل ہیں. مجازی میموری کے مسائل میں سے ایک یا ایک چیزیں اس کے حل ہے یہ ہے کہ اس عمل کو مکمل طور پر ایک دوسرے کے جاہل ہونا چاہئے. اور تو آپ کو کسی بھی پروگرام لکھ سکتے ہیں کہ کسی پوائنٹر dereferences کی طرح ایک ایسا پروگرام ہے جو یہ کہتا ہے کہ * (ox1234) لکھنے، اور کہ محولہ لقب ضبطی میموری 1234 ایڈریس. لیکن یہ آپریٹنگ سسٹم پر ہے تو کیا 1234 کا مطلب ترجمہ. تو 1234 اگر اس عمل کے لئے ایک درست میموری ایڈریس ہوتا ہے، جیسے یہ اسٹیک یا کچھ اور ہے، تو یہ کہ میموری ایڈریس کی قیمت واپس آ جائیں گے جہاں تک عمل جانتا ہے. لیکن 1234 اگر ایک درست طور پر یہ پتہ نہیں ہے، جیسا کہ زمین ہوتا ہے میموری میں سے کچھ چھوٹا سا ٹکڑا اسٹیک سے باہر ہے اور ڈھیر سے باہر اور تم سچ میں نہیں ہے تو پھر اس وقت آپ segfaults جیسی چیزوں کا استعمال کیا کیونکہ آپ میموری چھونے کی ہے کہ آپ کو چھو نہیں کیا جانا چاہئے کر رہے ہیں. یہ بھی سچ ہے - ایک 32 بٹ نظام، 32 بٹس کا مطلب ہے کہ آپ کے پاس ایک میموری ایڈریس کی وضاحت کرنے کے لئے 32 بٹس ہے. یہ کیوں ہے اشارہ 8 بائٹس ہیں کیونکہ 32 بٹیں 8 بائٹس ہیں - یا 4 بائٹس. نوٹیفائر 4 بائٹس ہیں. تو وہ ہے، جب تم oxbfffff طرح ایک پوائنٹر دیکھ - کسی بھی پروگرام کے اندر اندر آپ کو کسی بھی صوابدیدی پوائنٹر کی تعمیر کر سکتے ہیں، ffffffff - ox0 سے بیل 8 f's کہیں. [طالب علم] کیا نہیں ہے آپ کا کہنا ہے کہ انہوں نے 4 بائٹس ہیں؟ >> جی ہاں. [طالب علم] ہر بائٹ کو پھر ہو گا - >> [Bowden] شش اعشاری. شش اعشاری - 5، 6، 7، 8. اشارہ تو تم ہمیشہ شش اعشاری میں دیکھنے جا رہے ہیں. یہ صرف ہے کہ ہم کس طرح اشارہ درجہ بندی. شش اعشاری کا ہر 2 ہندسے 1 بائٹ ہے. تو 4 بائٹس کے لئے 8 شش اعشاری ہندسے ہونے جا رہا ہے. تو 32 بٹ نظام پر ہر ایک پوائنٹر 4 بائٹس کو ہونے جا رہا ہے، جس کا مطلب یہ ہے کہ آپ کو آپ کے عمل میں کسی بھی صوابدیدی 4 بائٹس کی تعمیر کر سکتے ہیں اور اس کا ایک پوائنٹر، جس کا مطلب یہ ہے کہ جہاں تک اس بات سے آگاہ ہے، یہ ایک مکمل 32 بائٹس میموری 2 سے خطاب کر سکتے ہیں. اگرچہ اس تک رسائی حاصل نہیں ہے، یہاں تک کہ اگر آپ کے کمپیوٹر صرف 512 میگا بائٹس ہے، اس کا خیال ہے کہ یہ اتنا یاد ہے. اور آپریٹنگ سسٹم کافی ہوشیار ہے کہ یہ صرف مختص گا جو آپ نے واقعی ضرورت ہے ہے. ، صرف یہ نہیں ہے جانا اوہ، ایک نیا عمل: 4 gigs. جی ہاں. >> [طالب علم] بیل کا کیا مطلب ہے؟ تم اسے کیوں لکھ سکتا ہوں؟ یہ صرف شش اعشاری کے لئے نشانی ہے. جب آپ بیل کے ساتھ ایک بڑی تعداد آغاز دیکھتے ہیں، مسلسل باتیں شش اعشاری ہیں. [طالب علم] آپ کیا جب ایک پروگرام ختم ہوتا ہے ہوتا ہے کے بارے میں وضاحت کر رہے تھے. >> جی ہاں. جب ایک پروگرام ختم ہوتا ہے ہوتا ہے وہ آپریٹنگ سسٹم ہے صرف mappings ہے کہ یہ ان کے پتوں کے لئے ہے، اور یہ کہ اس erases. آپریٹنگ سسٹم اب ایک استعمال کرنے کے لئے پروگرام ہے کہ میموری دے سکتے ہیں. [طالب علم] ٹھیک ہے. تو جب آپ کو ڈھیر یا اسٹیک یا عالمی متغیر یا کچھ کچھ مختص، وہ سب جیسے ہی پروگرام ختم ہوتا ہے غائب کیونکہ آپریٹنگ سسٹم اب اس یاد کو کسی دوسرے عمل میں دینے کے لئے آزاد ہے. [طالب علم] اگرچہ شاید اب بھی میں لکھا اقدار ہیں؟ >> جی ہاں. اقدار کا امکان اب بھی ہیں. یہ صرف یہ ہے ان کو حاصل کرنے کے لئے مشکل ہو جائے گا. یہ بہت زیادہ مشکل ہے ان کو حاصل کرنے کے لئے سے خارج کر دیا فائل کو حاصل کرنے کے لئے ہے کی وجہ سے خارج کر دیا فائل کی قسم میں ایک طویل وقت کے لئے وہاں بيٹھے اور ہارڈ ڈرائیو بہت بڑا ہے. تو اس میموری کے مختلف حصوں کو ادلیکھت ہو رہا ہے اس سے پہلے کہ یہ میموری کا حصہ ہے کہ اس فائل میں استعمال کیا جاتا ادلیکھت ہوتا ہے. لیکن مرکزی میموری، RAM، ایک تیز بہت کے ذریعے آپ سائیکل، تو یہ بہت تیزی سے ادلیکھت ہو رہا ہے. اس یا کسی اور چیز پر سوال؟ [طالب علم] میں ایک مختلف موضوع کے بارے میں سوالات ہیں. ٹھیک ہے. >> کیا کسی کو بھی اس پر سوال ہے؟ ٹھیک ہے. مختلف موضوع ہے. >> [طالب علم] ٹھیک ہے. میں پریکٹس ٹیسٹ کے کچھ دیکھ رہا تھا، اور یہ ان میں سے ایک میں sizeof کے بارے میں بات کر رہی تھی اور قیمت کہ اس کے فوائد یا مختلف متغیر اقسام. >> جی ہاں. اور اس نے کہا ہے کہ int اور طویل دونوں دونوں 4 واپسی، تو وہ دونوں 4 بائٹس طویل ہیں. وہاں ایک int اور ایک طویل کے درمیان کوئی فرق ہے، یا یہ ایک ہی بات ہے؟ جی ہاں، اس میں ایک فرق ہے. C معیار - میں شاید تک گندگی میں جا رہا ہوں. C معیار صرف پسند کیا C، C. کی سرکاری دستاویزات یہ ہے کہ یہ کیا کہتا ہے. C معیار صرف کا کہنا ہے کہ ہے کہ ایک چار 1 بائٹ ہمیشہ کے لئے اور ہمیشہ رہے گا. اس کے بعد سب کچھ - ہمیشہ ایک مختصر ہے یا اس سے زیادہ ایک چار کے برابر ہونے کے طور پر بیان کیا گیا ہے. یہ سختی سے بڑا، لیکن مثبت نہیں ہو سکتا ہے. ایک int یا اس سے زیادہ ایک مختصر کے برابر ہونے کے طور پر بیان کیا جاتا ہے. اور ایک طویل یا اس سے زیادہ ایک int کے برابر ہونے کے طور پر بیان کیا جاتا ہے. اور ایک طویل طویل یا اس سے زیادہ طویل کے برابر ہے. لہذا صرف ایک چیز C معیار کی وضاحت کرتا ہے ہر چیز کی رشتہ دار ترتیب ہے. میموری کی اصل رقم ہے جو کہ چیزوں کو لے عام طور پر عملدرآمد تک ہے، لیکن یہ بہت اچھی طرح اس مقام پر وضاحت کی گئی ہے. >> [طالب علم] ٹھیک ہے. تو شارٹس تقریبا ہمیشہ 2 بائٹس جا رہے ہیں. Ints تقریبا ہمیشہ 4 بائٹس کے لئے جا رہے ہیں. لانگ چاہتا ہے تقریبا ہمیشہ 8 بائٹس کے لئے جا رہے ہیں. چاہتا ہے اور، چاہے آپ کو ایک 32 بٹ یا 64 بٹ نظام کا استعمال کرتے ہوئے کر رہے ہیں پر منحصر ہے. تو ایک طویل نظام کی قسم کے مطابق کی جا رہی ہے. اگر آپ کو آلات کی طرح ایک 32 بٹ نظام کا استعمال کرتے ہوئے کر رہے ہیں، اس 4 بائٹس کو ہونے جا رہا ہے. اگر آپ کو حال ہی میں کمپیوٹر کی ایک بہت کی طرح ایک 64 بٹ کا استعمال کرتے ہوئے کر رہے ہیں، یہ 8 بائٹس کو ہونے جا رہا ہے. Ints تقریبا ہمیشہ ہی اس وقت 4 بائٹس ہیں. لانگ چاہتا ہے تقریبا ہمیشہ 8 بائٹس ہیں. ماضی میں، ints صرف 2 بائٹس تھے. نوٹس لیکن ہے کہ اس سے بڑی اور برابر ان تعلقات کی مکمل طور پر سب مطمئن ہے. تو طویل عرصے سے بالکل ایک عددی طور پر ایک ہی سائز کے کرنے کی اجازت ہے، اور یہ بھی ایک طویل طویل کے طور پر ایک ہی سائز کے کرنے کی اجازت ہے. اور یہ صرف اس لئے ہے کہ نظام کے 99،999 فی صد میں، یہ برابر ہو جا رہا ہے ہے یا تو ایک int یا ایک طویل طویل ہے. یہ صرف 32 بٹ یا 64 بٹ پر انحصار کرتا ہے. >> [طالب علم] ٹھیک ہے. floats میں بٹس کی شرائط میں نامزد دشملو نقطہ ہے؟ بائنری کے طور پر کی طرح ہے؟ >> جی ہاں. آپ CS50 کے لئے جاننے کی ضرورت نہیں ہے. آپ کہ 61 میں بھی نہیں سیکھتے ہیں. آپ کسی بھی کورس میں سچ میں یہ جاننے کے لئے نہیں ہے. یہ صرف ایک نمائندگی ہے. میں عین مطابق تھوڑا الاٹمنٹ بھول جاتے ہیں. چل نقاط کا خیال یہ ہے کہ آپ بٹس کی ایک مخصوص تعداد کی نمائندگی مختص - بنیادی طور پر، سب کچھ سائنسی سنکیتن میں ہے. تو آپ بٹس کی ایک مخصوص تعداد میں 1،2345 طرح تعداد خود کی نمائندگی مختص. میں 5 سے زیادہ ہندسوں کے ساتھ کبھی بھی ایک بڑی تعداد کی نمائندگی نہیں کر سکیں گے. تو پھر تم بھی بٹس کی ایک مخصوص تعداد میں مختص تاکہ اس طرح ہونا جاتا ، آپ کو صرف ایک مخصوص تعداد میں، اس طرح کی سب سے بڑی مائپادک ہے جو آپ کر سکتے ہیں ہے جا سکتے ہیں اور آپ صرف ایک مخصوص مائپادک جا سکتے ہیں، چاہتے ہیں کہ سب سے چھوٹی مائپادک ہے جو آپ کر سکتے ہیں ہے. مجھے یاد نہیں عین مطابق راستہ بٹس ان تمام اقدار کے تفویض کیے گئے ہیں، بٹس کی ایک مخصوص تعداد میں 1،2345 کے لئے وقف ہیں، بٹس کی ایک مخصوص تعداد مائپادک کے لئے وقف ہیں، اور یہ صرف اس صورت میں ممکن ہے ایک خاص سائز کی ایک مائپادک کی نمائندگی کرنے کے لئے. [] طالب علم اور ایک ڈبل؟ ایک اضافی طویل فلوٹ کی طرح ہے؟ >> جی ہاں. یہ اب آپ 4 بائٹس کی بجائے 8 بائٹس کا استعمال کرتے ہوئے کر رہے ہیں سوائے ایک فلوٹ کے طور پر ایک ہی بات ہے. اب آپ 9 ہندسے یا 10 ہندسے کو استعمال کرنے کے لئے کے قابل ہو جائے گا، اور اس کی بجائے 300 100 کرنے کے قابل ہو جائے گا. >> [طالب علم] ٹھیک ہے. اور floats بھی 4 بائٹس ہیں. >> جی ہاں. ویسے، ایک بار پھر، یہ شاید عام عمل پر مجموعی طور پر انحصار کرتی ہے، لیکن floats 4 بائٹس ہیں، ڈبلز 8 ہیں. ڈبلز ڈبل بلایا کیونکہ وہ ڈبل floats کا سائز کر رہے ہیں. [طالب علم] ٹھیک ہے. اور وہاں ڈبل ڈبلز رہے ہیں؟ >> نہیں ہیں. مجھے لگتا ہے کہ - طویل چاہتا ہے کی طرح >> [طالب علم] >> جی ہاں. میں ایسا نہیں سوچتا. جی ہاں. [طالب علم گزشتہ سال کے امتحان] مرکزی تقریب کے بارے میں ایک سوال یہ تھا آپ کے پروگرام کے حصہ کے طور پر کی ہے. جواب تھا کہ یہ آپ کے پروگرام کا حصہ نہیں ہے. کس صورتحال میں؟ یہی ہے جو میں نے دیکھا. [Bowden] ایسا لگتا ہے - >> [طالب علم] کیا صورت حال ہے؟ کیا آپ کو کوئی مسئلہ ہے؟ >> [طالب علم] ہاں، ہاں، میں یہ ضرور اوپر ھیںچو کر سکتے ہیں. یہ نہیں ہے، تکنیکی طور پر، لیکن بنیادی طور پر یہ ہو رہا ہے. [طالب علم] میں ایک مختلف سال ایک دیکھا. یہ صحیح یا غلط کی طرح تھا: ایک درست - >> اوہ، سی فائل ہے؟ [طالب علم] کوئی بھی سی فائل ہونا ضروری ہے - [ایک ہی وقت میں دونوں بولنے - unintelligible] ٹھیک ہے. تو وہ الگ ہے. سی فائل صرف افعال کو کنٹرول کرنے کی ضرورت ہے. آپ کو مشین کوڈ میں ایک فائل ہے، بائنری، جو کچھ بھی مرتب کر سکتے ہیں، بغیر کارکردگی ابھی تک ہے. ایک درست کارکردگی ایک مرکزی تقریب ہونا ضروری ہے. آپ 1 فائل میں 100 کام کرتا ہے لیکن کوئی اہم لکھ سکتے ہیں اور پھر بائنری اسے نیچے مرتب، تو پھر آپ دوسری فائل ہے جو صرف اہم ہے لکھتے ہیں لیکن یہ ان کے افعال میں سے ایک گروپ کا مطالبہ یہاں یہ بائنری فائل میں. اور اس طرح ہے کہ جب آپ کارکردگی قابل بنا رہے ہیں، کیا linker کرتا ہے ہے یہ ان 2 بائنری فائلوں کو ایک executable میں یکجا کیا گیا ہے. تو سی فائل. ایک اہم تقریب میں کرنے کی ضرورت کی ضرورت نہیں ہے. اور آپ کو بڑی کوڈ اڈوں پر ہزاروں C فائلوں. اور 1 اہم فائل کی نظر آئے گی. مزید سوال؟ [طالب علم] ایک سوال کے جواب میں تھا. اس نے کہا کہ ایک سنکلک بنانے. صحیح یا غلط؟ اور جواب غلط تھا، اور میں سمجھ کیوں بجنا طرح نہیں ہے. لیکن ہم کیا کہتے ہیں اگر یہ نہیں ہے؟ بنیادی طور پر صرف - میں دیکھ رہا ہوں یہ بالکل وہی جو یہ مطالبہ کر سکتے ہیں. لیکن یہ صرف حکم چلاتی ہے. بنائیں. میں اس کو روکنا کر سکتے ہیں. جی ہاں. اوہ، جی ہاں. بھی بنائیں کہ کرتا ہے. اس کا کہنا ہے کہ شرنگار افادیت کا مقصد خود کار طریقے سے اس بات کا تعین کرنا ہے جو ایک بڑے پروگرام کے ٹکڑے recompiled رکھا جائے کرنے کی ضرورت ہے اور حکم ان recompile جاری ہے. آپ کو فائلوں ہیں جو بالکل بڑی کر سکتے ہیں. فائلوں کی وقت کے ٹکٹ میں بنائیں لگتا ہے، اور جیسا کہ ہم نے پہلے کہا، آپ کو انفرادی فائلوں مرتب نیچے، اور کر سکتے ہیں جب تک کہ آپ linker حاصل کرنے کے لئے نہیں ہے کہ وہ ایک دوسرے کے ساتھ ایک executable میں مل جل کر ڈال رہے ہیں. اگر ایسا ہے تو آپ کو 10 مختلف فائلوں ہیں اور آپ ان میں سے 1 تبدیلی، تو جو کرنے کے لئے کیا جا رہا ہے صرف recompile ہے کہ 1 فائل اور پھر سب مل کر relink. لیکن یہ اس سے کہیں dumber ہے. یہ آپ پر منحصر ہے مکمل طور پر کی وضاحت کرنے کے کہ وہ کیا کرنا چاہئے. یہ ڈیفالٹ کی طرف سے اس وقت سٹیمپ سامان کو تسلیم کرنے کی صلاحیت ہے، لیکن آپ کو شرنگار فائل کو لکھنے کے لیے کچھ بھی کر سکتے ہیں. آپ کو ایک فائل بنانا تاکہ جب آپ کو یہ صرف CD دوسرے ڈائریکٹری بنانے ٹائپ کریں. لکھ سکتے ہیں میں مایوس ہو رہی ہے کیونکہ اپنے آلات کے اندر میں سمت سب کچھ اور پھر میں میک سے PDF کو دیکھنے کے. ، اس لئے میں فائنڈر اور میں مت جاؤ کر سکتے ہیں، سرور سے رابطہ اور سرور میں مربوط میرا آلات ہے، اور اس کے بعد میں نے پی ڈی ایف کھولنے لیٹیکس کی طرف سے مرتب کیا جاتا ہے. لیکن میں ہو رہی تھی مایوس، ہر ایک وقت میں پی ڈی ایف کو تازہ کرنے کی ضرورت ہے کیونکہ میں اسے ایک مخصوص ڈائریکٹری ہے کہ اس تک رسائی حاصل کر سکتے ہیں کرنے کے لئے کاپی تھا اور یہ پریشان ہو رہی تھی. تو بجائے میں نے فائل، جس سے آپ کی وضاحت کس طرح یہ چیزیں بناتا ہے ہے لکھا. آپ کس طرح بناتے ہیں یہ PDF لیٹیکس ہے. صرف کسی دوسرے شرنگار فائل کی طرح - یا مجھے لگتا ہے کہ آپ کو فائلوں کو نہیں دیکھا ہے لیکن ہم آلات میں ایک عالمی شرنگار فائل ہے جو صرف کا کہنا ہے کہ ہے، اگر آپ کو ایک سی فائل مرتب کر رہے ہیں، بجنا کا استعمال کریں. اور، تو یہاں میرے شرنگار فائل میں ہے کہ میں میں کہتا اس فائل کو آپ PDF لیٹیکس کے ساتھ مرتب کرنا چاہتے ہیں کے لئے جا رہے ہیں. اور اس طرح یہ PDF لیٹیکس کہ مرتب کر رہی ہے. ہے نہیں مرتب ہے. یہ صرف ترتیب میں مخصوص میں یہ حکم دیتا ہے چل رہا ہے. تو یہ PDF لیٹیکس چلتا ہے، یہ ڈائریکٹری میں اس پر کاپی کرنا چاہتے ہیں کی نقول، یہ سی ڈی ڈائریکٹری میں اور دوسری چیزوں ہے، لیکن یہ سب کرتا ہے جب ایک فائل کی تبدیلیوں کو تسلیم کیا جاتا ہے، اور اگر یہ تبدیل، تو یہ حکم دیتا ہے کہ اس پر چلانے والا ہے چلے گا جب فائل تبدیلیاں. >> [طالب علم] ٹھیک ہے. مجھے پتہ نہیں کہاں عالمی شرنگار فائلوں ہیں میرے لئے یہ چیک کرنے کے لیے ہے. دیگر سوال؟ ماضی سے کچھ quizzes ہے؟ کوئی پوائنٹر باتیں؟ طرح اشارہ کے ساتھ ٹھیک ٹھیک چیزیں ہیں - میں جا رہا ہوں اس پر ایک گئے تمام سوالات کے سوال تلاش کرنے کے قابل ہو جائے کرنے کے لئے نہیں کر رہا ہوں - لیکن صرف ایک چیز کے بارے میں اس طرح کی طرح. اس بات کا یقین کریں کہ کہ تم سمجھ سکتا ہوں جب میں کہتا ہوں کہ int * X * Y - یہ بالکل نہیں ہے یہاں کچھ ہے، مجھے لگتا ہے. لیکن جیسے * X * Y، ان 2 متغیر اسٹیک پر ہیں ہیں. میں کہتا ہوں کہ جب X = malloc (sizeof (int))، X اب بھی اسٹیک پر ایک متغیر ہے، کی malloc ڈھیر میں کچھ بلاک ہے، اور ہم ڈھیر پر X نقطہ کر رہے ہیں. تو ڈھیر اسٹیک پوائنٹس پر کچھ. جب بھی تم نے کچھ malloc، آپ لامحالہ یہ ایک پوائنٹر کے اندر ذخیرہ کرنے کر رہے ہیں. تو اس پوائنٹر اسٹیک ہے، malloced بلاک ڈھیر پر ہے. بہت سے لوگوں کی ایک الجھن میں جاتے ہیں اور کا کہنا ہے کہ int * X = malloc، X ڈھیر پر ہے. نہیں. کیا X اشارہ ڈھیر پر ہے. X خود اسٹیک پر ہے، جب تک آپ کو کسی بھی وجہ سے ایکس ایک عالمی متغیر ہو، جس صورت میں میموری کا ایک اور علاقے میں ہوتا ہے. ٹریک رکھنے کے تو ان باکس اور تیر diagrams کوئز کے لئے میں بہت عام ہیں. یا اگر یہ کوئز 0 نہیں ہے 1 کوئز ہو جائے گا. آپ ان میں سے سب کو معلوم ہے، انتخاب میں اقدامات کے بعد آپ ان سوالات کا جواب تھا. جی ہاں. >> ضرور - [طالب علم] ہم ان اقدامات سے جا سکتے ہیں. اقدامات اور انتخاب سے پہلے کہ ہم preprocessing ہے، مرتب، جمع، اور لنک. Preprocessing. اس کا کیا کرتا ہے؟ یہ سب سے آسان میں قدم ہے - اچھی طرح نہیں - اس کا یہ مطلب یہ نہیں ہے یہ واضح ہونا چاہئے، لیکن یہ سب سے آسان قدم ہے. تم لوگ اپنے آپ پر عملدرآمد کر سکتے ہیں. جی ہاں. [طالب علم] لے لو آپ اپنے اس طرح شامل ہیں اور اس وقت اور نقل بھی وضاحت کرتا ہے. # شامل کی طرح چیزوں کے لئے لگ رہا ہے اور # وضاحت، اور یہ صرف کاپیاں اور pastes وہ کیا اصل مطلب. تو جب آپ کا کہنا ہے کہ # cs50.h شامل پریپروسیسر کاپی اور پیسٹ cs50.h ہے اس لائن میں. پریپروسیسر جب آپ کا کہنا ہے کہ # X 4 کے کی وضاحت، پورے پروگرام کے ذریعے جاتا ہے اور 4 کے ساتھ X کے تمام مثالوں کی جگہ لے لیتا ہے. تو پریپروسیسر ایک درست C فائل لیتا ہے اور ایک درست C فائل نتائج چیزیں کہاں ہے کاپی اور چسپاں. تو اب انتخاب. اس کا کیا کرتا ہے؟ [طالب علم] C سے بائنری جاتا ہے. [Bowden] یہ بائنری تمام طرح نہیں کرتا. [طالب علم] پھر مشین کوڈ؟ >> یہ مشین کوڈ نہیں ہے. [طالب علم] اسمبلی؟ >> اسمبلی یہ اسمبلی جاتا ہے اس سے پہلے کہ C کوڈ راستہ جاتا ہے، اور سب سے زیادہ زبانوں کچھ اس طرح کرتے ہیں. اعلی سطح کے کسی بھی زبان کو اٹھا لو، اور اگر تم اس کے مرتب کرنے جا رہے ہیں، اقدامات میں مرتب ہونے کا امکان ہے. پہلے C ازگر پر مرتب ہو رہا ہے، تو اس اسمبلی C مرتب جا رہا ہے، اور اس کے بعد اسمبلی بائنری ترجمہ کرنے کے لئے کی جا رہی ہے. تو انتخاب C سے اسمبلی میں لانے کی جا رہی ہے. مرتب لفظ عام طور پر ایک اعلی سطح سے لانے کا مطلب ہے کہ ایک کم درجے کی پروگرامنگ زبان ہے. تو یہ تالیف میں صرف قدم ہے جہاں آپ کو ایک اعلی درجے کی زبان کے ساتھ شروع اور کم سطح کے ایک زبان میں ختم ہے، اور یہی وجہ ہے کہ قدم مرتب کہا جاتا ہے. انتخاب کے دوران طالب علم []، کا کہنا ہے کہ آپ # شامل کیا ہے cs50.h. سنکلک recompile cs50.h،، کام کرتا ہے جو وہاں ہے کی طرح اور یہ کہ اسمبلی کے کوڈ میں بھی طور پر ترجمہ، یا یہ ایسی چیز ہے جس سے پہلے اسمبلی کی کاپی اور پیسٹ کریں گے؟ cs50.h بہت خوبصورت اسمبلی میں کبھی ختم نہیں کرے گا. تقریب prototypes اور چیزوں کی طرح مواد کے لئے آپ کو محتاط رہنا. اس کی ضمانت دیتا ہے کہ سنکلک چیزوں کو چیک کرنے کے لیے جیسے تم کام کرتا ہے بلا رہے ہو کر سکتے ہیں حق واپسی کی قسم اور صحیح دلائل اور سامان کے ساتھ. تو cs50.h فائل میں رکھا جائے preprocessed گا، اور اس کے بعد جب یہ انتخاب ہے یہ بنیادی طور پر دور پھینک دیا کے بعد یہ اس بات کا یقین کر لیں کہ کہ سب کچھ کیا جا رہا ہے صحیح طریقے سے کہا جاتا بنا دیتا ہے. لیکن CS50 لائبریری میں بیان کیا کام کرتا ہے، جو cs50.h سے الگ ہیں، ان لوگوں کو الگ الگ مرتب نہیں رکھا جائے گا. اس سے منسلک قدم میں اصل میں آئے گا، تو ہم ایک سیکنڈ میں مل جائے گا. لیکن اس سے پہلے، کیا جمع ہے؟ [طالب علم] بائنری پر اسمبلی؟ >> جی ہاں. جمع. ہم اس انتخاب کو فون نہیں ہے، کیونکہ اسمبلی بہت بائنری کا ایک خالص ترجمہ ہے. اسمبلی سے بائنری جانے میں بہت کم منطق ہے. یہ صرف ایک ٹیبل میں تلاش کی طرح ہے، اوہ، ہم نے یہ ہدایات ہے؛ 01110 بائنری کے مساوی ہے. اور اس طرح فائلوں ہے کہ عام طور پر جمع نتائج ہیں. اے فائلوں. اور او فائلیں ہیں جو ہم سے پہلے کہہ رہے تھے، ایک فائل ایک اہم تقریب ہے کہ ضرورت نہیں ہے. کوئی بھی فائل جب تک یہ ایک درست C فائل ہے کے طور پر اے فائل. رکھا جائے مرتب کیا جا سکتا ہے. یہ نیچے اے. مرتب کیا جا سکتا ہے. اب، منسلک ہے جو اصل میں کا ایک گروپ پڑتا ہے اے فائلوں اور انہیں ایک executable لاتا ہے. اور تو کیا ملانے والی ہے یہ ہے تم سے لائبریری کا CS50 اے فائل. کے طور پر سوچ سکتے ہیں. یہ ایک پہلے ہی مرتب کی بائنری فائل ہے. اور اس طرح جب آپ کو آپ کی فائل، اپنے hello.c، جو GetString مطالبہ تالیف، hello.c hello.o مرتب ہو جاتا ہے، hello.o بائنری میں ہے. یہ GetString کا استعمال کرتا ہے، تو اس cs50.o کو جانے کی ضرورت ہے، اور linker ان کے ساتھ smooshes اور اس فائل میں GetString نقل اور ایک executable ہے کہ تمام افعال کو اس کی ضرورت ہے کے ساتھ باہر آتا ہے. تو cs50.o اصل میں نہیں ہے ایک اے فائل، لیکن اس کے قریب کافی ہے کہ کوئی بنیادی فرق ہے. تو منسلک فائلوں کا ایک گروپ کو ایک ساتھ لاتی ہے جو علیحدہ علیحدہ افعال میں سے تمام پر مشتمل میں استعمال کرنے کی ضرورت ہے اور کارکردگی قابل ہے کہ اصل میں چلے گا پیدا کرتا ہے. اور اس طرح یہ بھی ہے جو ہم پہلے کہہ رہے تھے جہاں آپ 1000 سی فائلوں کر سکتے ہیں، تم ان سب کو مرتب کرنے کے لئے اے فائلوں. جو شاید تھوڑی دیر لے جائے گا، تو آپ 1 تبدیل سی فائل. تم صرف. 1 C فائل اور پھر relink باقی سب recompile کرنے کی ضرورت ہے، سب کچھ واپس مل کر لنک. [طالب علم] جب ہم منسلک ہم lcs50 لکھ رہے ہیں؟ جی ہاں، تو lcs50. linker کہ پرچم سگنل میں کہا گیا ہے کہ آپ کو اس لائبریری میں رکھا جائے منسلک کیا جانا چاہئے. سوال؟ کیا ہم پہلی درس میں 5 سیکنڈ سے بھی دوسرے بائنری کے ہو گئے ہو؟ میں ایسا نہیں سوچتا. آپ بڑے OS کے تمام پتہ ہونا چاہیئے کہ ہم ختم ہو گئے ہو، اور آپ کو کرنے کے قابل ہو، اگر ہم نے آپ کو ایک تقریب میں دیا جانا چاہئے، آپ کہتے ہیں کہ یہ بڑا O ہے، تقریبا کے قابل ہونا چاہئے. یا اچھی طرح، بڑا O کچا ہے. تو اگر آپ نے چیزوں کے بارے میں اتنی ہی تعداد پر looping loops کے لئے اندر در اندر دیکھو، طرح int میں، میں <ن؛ int J، J > مربع [طالب علم] N. >> ن مربع ہو جاتا ہے. اگر آپ ٹرپل اندر در اندر ہے، ن cubed جاتا ہے. تو بات اس طرح آپ کو فوری طور پر باہر کی طرف اشارہ کرنے کے قابل ہونا چاہئے. آپ کو اندراج کی طرح اور بلبلا طرح جاننا اور ترتیب دیں اور ان میں سے سب کو ضم کرنے کی ضرورت ہے. یہ آسان ہے سمجھنے کی وجہ سے وہ ان (ن) مربع اور (ن) کے لاگ ان ن اور اس کی سب کیونکہ مجھے لگتا ہے کہ ایک کوئز ایک سال جہاں ہم بنیادی طور پر آپ کو دی تھی بلبلا طرح کی ایک عمل درآمد اور کہا، "اس تقریب کی رننگ ٹائم کیا ہے؟" تو اگر آپ یہ بلبلا طرح کے طور پر سمجھتے ہیں، تو آپ کو این مربع فوری طور پر کہہ سکتے ہیں. لیکن اگر آپ صرف اسے دیکھو، آپ کو یہ بلبلا طرح کا احساس بھی نہیں کی ضرورت ہے؛ تم صرف یہ اور یہ کر رہا ہے کہہ سکتے ہیں. یہ مربع ن ہے. [طالب علم] کوئی سخت مثال کے طور پر آپ کے ساتھ آ سکتا ہے، باہر figuring کا بھی اسی طرح خیال کی طرح؟ مجھے نہیں لگتا ہے کہ ہم آپ کے ذہن میں کوئی مشکل مثالیں دینا ہوں گے. بلبلا طرح کی چیز کے بارے میں سخت ہے ہم کے طور پر جائیں گے، اور یہاں تک کہ جب تک آپ سمجھتے ہیں کہ آپ صف پر iterating رہے ہیں صف میں ہر عنصر کے لئے، جو کچھ کہ مربع ن ہے جا رہا ہے. یہیں جیسے عمومی سوالات ہم ہیں - اوہ. دوسرے دن، ڈوگ نے ​​دعوی کیا، "میں ایک الگورتھم ہے جو ایک صف ترتیب کر سکتے ہیں ایجاد ہے "O (لاگ ان ن) کا وقت! ن کی تعداد کے" تو ہم جانتے ہیں کہ کس طرح یہ ناممکن ہے؟ [اشراوی طالب علم کے جواب] >> جی ہاں. بہت کم سے کم، آپ صف میں ہر عنصر کے دلوں کو چھو ہے، تو یہ ناممکن ہے ایک صف ترتیب - اگر سب کچھ ناچھانٹا ہوا ترتیب میں ہے، تو آپ صف میں سب کچھ کو چھونے جا رہے ہیں، تو یہ ناممکن ہے اسے این اے سے کم وقت میں. [طالب علم] آپ ہمیں ہے کہ این اے میں ایسا کرنے کے قابل ہونے کی مثال سے ظاہر ہوتا ہے. اگر آپ کو میموری کا ایک بہت استعمال کرتے ہیں. >> جی ہاں. اور that's - میں بھول گیا ہے that's - اس طرح گنتی کر رہا ہے؟ ہمم. یہ ایک عددی چھنٹائی الگورتھم ہے. میں نے اس کے لئے خصوصی نام کے لئے تلاش کر رہا تھا کہ گزشتہ ہفتے میں یاد نہیں کر سکا. جی ہاں. یہ قسم کی قسم جو بڑا این اے میں چیزوں کو پورا کر سکتے ہیں ہیں. لیکن اس کی حدود ہیں، جیسے تم integers صرف ایک مخصوص تعداد میں استعمال کر سکتے ہیں. پلس اگر آپ کچھ that's کو الگ الگ کرنے کی کوشش کر رہے ہیں - اگر آپ صف 012، -12، 151، 4 ملین ہے، تو یہ ایک عنصر مکمل طور پر پورے چھنٹائی برباد کرنے کی جا رہی ہے. سوال؟ [طالب علم] اگر آپ کو ایک پنراورتی تقریب ہے اور یہ صرف پنراورتی کالز کرتا ہے واپسی بیان کے اندر اندر، جو دم سے پنراورتی ہے، اور تاکہ رن ٹائم کے دوران نہیں میموری استعمال کرے گی یا کم از کم یہ موازنہ میموری کا استعمال کرتے ہوئے کے طور پر حل تکراری گے؟ [Bowden] جی ہاں. یہ کسی حد تک سست ہونے کا امکان، لیکن سچ میں نہیں ہو گا. پنراورتی پونچھ کے بہت اچھا ہے. اسٹیک فریم میں دوبارہ کی تلاش میں ہے، چلو کا کہنا ہے کہ ہم اہم ہے اور ہم int بار (int X) یا کچھ اور ہے. یہ ایک کامل پنراورتی تقریب نہیں ہے، لیکن واپسی کا بار (X - 1). تو ظاہر ہے، یہ نظم و ضبط میں بہت سی خامیاں ہیں جن کی بنا پر ہے. آپ کے پاس بیس مقدمات اور سامان کی ضرورت ہے. لیکن یہاں کا خیال ہے کہ یہ پنراورتی دم ہے، جب اہم کالز بار ہے کہ اس کے اسٹیک فریم حاصل کرنے کے لئے جا رہا ہے جس کا مطلب ہے. اس اسٹیک فریم میں میموری کا ایک چھوٹا سا بلاک ہونے جا رہا ہے ہے کہ اس کی دلیل ایکس کے مساوی ہے. اور اس طرح ہم کا کہنا ہے کہ مرکزی بار (100) کال کرنے کے لئے ہوتا ہے؛ تو X 100 کے طور پر شروع کی جا رہی ہے. اگر سنکلک تسلیم کرتا ہے کہ یہ ایک کی دم پنراورتی تقریب ہے، پھر جب بار اپنی پنراورتی کال بار بناتا ہے، ایک نئے اسٹیک فریم، جس میں جہاں اسٹیک بڑی حد تک بڑھتی ہوئی شروع کرنے کی بجائے، بالآخر اس ڈھیر میں چلائیں اور اس کے بعد آپ کو segfaults ملے گا کیونکہ میموری colliding شروع ہوتا ہے. اس کے اپنے اسٹیک فریم بنانے کے بجائے، اس کا احساس کر سکتے ہیں، ارے، میں اس اسٹیک فریم میں واپس آنے کی واقعی کبھی نہیں کی ضرورت ہے، تو بجائے میں 99 کے ساتھ اس بحث اور اس کے بعد کی جگہ بار سے زائد شروع کریں گے. اور پھر اسے دوبارہ کرتے ہیں اور اس کی واپسی کی بار تک پہنچ جائے گی (X - 1) اور یہ ایک نیا اسٹیک فریم بنانے کی بجائے 98 کے ساتھ اس کی موجودہ دلیل کی جگہ لے لیں گے اور پھر بار کے آغاز پر واپس کود جاؤ. وہ آپریشن، اسٹیک پر 1 قیمت کو تبدیل کرنے اور شروع کرنے کے لئے واپس کود کافی موثر ہیں. تو نہ صرف یہ ایک علیحدہ تقریب کے طور پر ایک ہی میموری استعمال ہے جس میں تکراری ہے ہے کیونکہ آپ کو صرف 1 اسٹیک فریم کا استعمال کرتے ہوئے کر رہے ہیں، لیکن آپ downsides مبتلا نہیں کر رہے ہیں افعال کو فون کرنے کے لئے. کالنگ افعال کو کسی حد تک مہنگی ہو کر سکتے ہیں کیونکہ اس سیٹ اپ کرنا ہے teardown اور یہ سب. تو یہ دم کی تکرار اچھا ہے. [طالب علم] یہ نئے اقدامات کیوں پیدا نہیں کرتا؟ کیونکہ یہ پتہ چلتا ہے، اس کی ضرورت نہیں ہے. بار کال صرف پنراورتی کال واپس آ رہا ہے. تو اس کی واپسی قیمت کے ساتھ کچھ کرنے کی ضرورت نہیں ہے. یہ صرف فوری طور پر اس پر واپس جا رہا ہے. تو یہ صرف اس کی اپنی دلیل کو تبدیل کرنے اور پھر سے شروع ہو رہا ہے. اور یہ بھی، اگر آپ کی دم پنراورتی ورژن نہیں ہے تو پھر آپ ان تمام سلاخوں کے جہاں جب اس بار کو واپس حاصل اس سے اس کی قیمت واپس کرنے کے لئے، تو اس بار فوری طور پر واپس اور یہ اس سے اس کی قیمت واپس، تو یہ صرف فوری طور پر واپس کرنے جا رہا ہے اور یہ ایک اس کی قیمت واپس. تو کیا تم ان چیزوں کے تمام اسٹیک پوپ آؤٹ اس کی بچت کر رہے ہیں سے واپسی قیمت صرف پورے راستے منظور بیک اپ رکھا جائے ویسے بھی جا رہا ہے. تو ہماری دلیل کو اپ ڈیٹ دلیل کے ساتھ کیوں نہیں کی جگہ لے لے اور پھر سے شروع ہے؟ اگر تقریب دم پنراورتی نہیں ہے، اگر آپ کی طرح کچھ کرنا - [طالب علم] اگر بار (X 1 +). >> جی ہاں. تو اگر آپ اس حالت میں ڈال دیا، تو آپ کی واپسی کی قیمت کے ساتھ کچھ کر رہے ہیں. یا یہاں تک کہ اگر آپ صرف 2 واپسی کرتے ہیں * بار (X - 1). تو اب بار (X - 1) ترتیب میں واپس کرنے کی ضرورت ہے کے لئے اس کی 2 مرتبہ قدر کا حساب، لہذا اب یہ اس کی اپنی علیحدہ اسٹیک فریم کی ضرورت ہے، اور اب، کوئی بات نہیں آپ کو کس طرح مشکل کوشش کرتے ہیں، آپ کو کرنے کی ضرورت پر جا رہے ہیں - اس دم نہیں ہے پنراورتی. [طالب علم] میں تکرار کو ایک دم تکرار کے لئے مقصد لانے کی کوشش کرے گا - [Bowden] ایک مثالی دنیا میں CS50 میں، لیکن آپ کے پاس نہیں ہے. کے لئے دم کی تکرار کو حاصل کرنے کے لئے، عام طور پر، آپ کو ایک اضافی دلیل قائم بار Y میں جہاں int ایکس لے جائے گا اور Y آخری چیز جو آپ کو واپس کرنا چاہتے ہیں کے مساوی ہے. (- 1 X)، 2 * Y تو پھر یہ آپ کے بار واپس لوٹنے پر جا رہے ہیں. تو یہ صرف ایک اعلی سطح کے کہ تم ان چیزوں کو کس طرح دم پنراورتی تبدیل. لیکن اضافی دلیل - اور پھر آخر میں جب آپ کو آپ کی بیس کیس تک پہنچنے کے ہیں، آپ نے ابھی Y واپس کیونکہ آپ کو ہے سارا وقت واپسی قیمت جو آپ چاہتے ہیں کو جمع. آپ کی قسم ہے گیا iteratively کر لیکن پنراورتی کالز کا استعمال کرتے ہوئے. سوال؟ جب تاروں کا استعمال کرتے ہوئے کی طرح ہو سکتا ہے کہ پوائنٹر ریاضی کے بارے میں [طالب علم]،. >> ضرور. پوائنٹر ریاضی. جب تاروں کا استعمال کرتے ہوئے یہ آسان ہے کیونکہ ڈور چار ستاروں ہیں، حروف ہمیشہ کے لئے اور ہمیشہ کسی ایک بائٹ ہیں، اور اس پوائنٹر ریاضی باقاعدہ ریاضی جب آپ ڈور کے ساتھ کام کر رہے ہو کے برابر ہے. چلو صرف اتنا کہنا چار کے * = "ہیلو". تو ہم یاد میں ایک بلاک ہے. 6 بائٹس کی ضرورت ہے کیونکہ آپ نے ہمیشہ اتارنا null مختتم کی ضرورت ہے. اور چار * کے اس صف کے آغاز کی طرف اشارہ کرنے جا رہا ہے. تو <وہاں اشارہ. اب، یہ بنیادی طور پر کسی بھی صف کس طرح کام کرتا ہے ہے، سے قطع نظر چاہے وہ malloc کی طرف سے یا چاہے وہ اسٹیک ہے واپسی تھا. کوئی بھی صف بنیادی طور پر صف کے آغاز پر ایک پوائنٹر ہے، اور اس کے بعد کسی بھی صف آپریشن، کسی بھی تخکرمن، صرف اس صف میں جا رہا ہے ایک مخصوص آفسیٹ. تو جب میں نے [3] کی طرح کچھ کا کہنا ہے کہ؛ اس کے جا رہا ہے اور اندر 3 حروف کی گنتی تو [3]، ہم 0 ہے، 1، 2، 3، تو [3] یہ L سے رجوع کرنے جا رہا ہے. [طالب علم] اور ہم + S 3 کر اور پھر قوسین ستارہ کی طرف سے ایک ہی قدر تک پہنچ سکتا ہے؟ جی ہاں. یہ * (زبانیں + 3) کے برابر ہے؛ اور یہ کہ ہمیشہ کے لئے اور ہمیشہ کے برابر کوئی بات نہیں ہے جو تم کرتے ہو. آپ بریکٹ نحو کو استعمال کرنے کے لئے کبھی نہیں کی ضرورت ہے. آپ * ہمیشہ نحو (زبانیں 3 +) کا استعمال کر سکتے ہیں. لوگ بریکٹ نحو کو پسند کرتے ہیں، اگرچہ. [طالب علم] لہذا تمام arrays اصل میں صرف اشارہ ہیں. تھوڑا سا فرق ہے جب میں نے کا کہنا ہے کہ int X [4]. >> [طالب علم] کیا کہ میموری پیدا؟ [Bowden] اسٹیک 4 ints تشکیل دیں، تو 16 بائٹس مجموعی جا رہا ہے. اسٹیک 16 بائٹس پیدا ہو رہا ہے. X کہیں بھی محفوظ نہیں ہے. یہ صرف ایک بات کے آغاز کا حوالہ دیتے علامت ہے. کیونکہ آپ کو اس جشن کے اندر صف کا اعلان کیا، کیا سنکلک کرنے جا رہی ہے صرف متغیر x کی تمام مثالوں کی جگہ لے لیں جہاں یہ ان 16 بائٹس کو منتخب کرنے کے لئے ہوا ہے. یہ چار کے ساتھ * کی علامت ہے کہ نہیں کر سکتے ہیں کیونکہ ایک حقیقی پوائنٹر ہے. یہ تو دوسری چیزوں کی طرف اشارہ ہے. X مسلسل جاری ہے. تم یہ ایک مختلف صف کی طرف اشارہ نہیں کر سکتے. >> [طالب علم] ٹھیک ہے. لیکن یہ خیال اس تخکرمن، اسی سے قطع نظر یہ ہے کہ کیا یہ ایک روایتی صف ہے یا اگر اس سے کچھ یا اگر پوائنٹر ہے یہ ایک malloced صف پوائنٹر ہے. اور اصل میں، یہ تو برابر ہے کہ وہ بھی ایک ہی بات ہے ہے. یہ اصل میں ترجمہ کیا بریکٹ کے اندر ہے اور کیا خانے کے چھوڑ دیا ہے، انہیں ایک دوسرے کے ساتھ جوڑتا ہے، اور dereferences. تو یہ صرف کے طور پر کے طور پر درست ہے * (+ 3) یا کے [3]. [طالب علم] آپ arrays 2 جہتی کے کی طرف اشارہ کرتے ہوئے اشارہ کر سکتا ہے؟ یہ مشکل ہے. روایتی طور پر، نہیں. ایک صف 2 جہتی صرف کچھ آسان نحو کے ساتھ ایک صف 1 جہتی ہے کیونکہ جب میں کہتا ہوں کہ int X [3] [3]، یہ واقعی میں صرف 9 اقدار سے 1 صف ہے. اور اس طرح جب میں انڈیکس، سنکلک جانتا ہے کہ میرا کیا مطلب ہے. اگر میں کہتا ہوں X [1] [2]، یہ جانتا ہے کہ میں دوسری قطار میں جانے کے لئے چاہتے ہیں، تو یہ پہلی 3 پر جا رہا ہے اور اس کے بعد یہ دوسری بات ہے کہ میں، تو اس ایک کو حاصل کرنے کے لئے جا رہا ہے کی ضرورت ہے. لیکن یہ اب بھی صرف ایک صف ایک جہتی ہے. اور اگر ایسا ہے تو میں اس صف پر ایک پوائنٹر کی وضاحت کرنا چاہتا تھا، میں کہتا ہوں int * P = X گے. X کی قسم ہے - یہ X کے بولڈ ہوئے کہا کہ قسم ہے کیونکہ یہ صرف ایک علامت ہے اور یہ ایک حقیقی متغیر نہیں ہے، لیکن یہ صرف ایک int * ہے. X صرف اس کے آغاز پر ایک پوائنٹر ہے. >> [طالب علم] ٹھیک ہے. اور اس میں [1] [2] تک رسائی حاصل کرنے کے قابل نہیں ہو گا. مجھے لگتا ہے کہ پوائنٹر اعلان کرنے کے لئے خصوصی نحو ہے، int طرح مضحکہ خیز کچھ (* P [- بالکل مضحکہ خیز چیز مجھے یہ بھی پتہ نہیں ہے. لیکن وہاں قوسین اور چیزوں کے ساتھ طرح اشارہ اعلان کے لئے ایک نحوی ہے. یہ بھی نہیں کہ تم دیتے ہو سکتا ہے. میں کچھ تو ہے جو مجھے سچ بتاو گے میں واپس دیکھ سکتا ہے. میں بعد میں اس کے لئے نظر آئے گا، اگر اس نقطہ نظر کے لئے ایک نحوی ہے. لیکن تم نے اسے دیکھا کبھی نہیں کریں گے. اور نحو بھی تو قدیمی ہے کہ اگر آپ اس کا استعمال کرتے ہیں، لوگوں کو ہکا بکا رہ جانیوالے رکھا جائے گا. بہوایامی arrays خوبصورت نایاب ہیں کے طور پر ہے. تم بہت زیادہ ہو - ٹھیک ہے، اگر آپ میٹرکس باتیں کر رہے ہیں یہ غیر معمولی ہونا نہیں ہے، لیکن آپ C میں شاذ و نادر ہی بہوایامی arrays کا استعمال کرتے ہوئے جا رہے ہیں. جی ہاں. >> [طالب علم.] چلو کا کہنا ہے کہ آپ کو ایک بہت ہی طویل صف ہے. تو یہ مجازی میموری میں مسلسل سب کو نظر آئے گا، ، ٹھیک ہے ایک دوسرے کے ساتھ عناصر کی طرح لیکن یہ جسمانی یاد میں اس کے لئے ممکن تقسیم پر ہو سکتا ہے؟ >> جی ہاں. مجازی میموری کام یہ ہے کہ یہ صرف جدا - آونٹن کا یونٹ ایک صفحہ، جس سے 4 کلو بائٹ جاتا ہے، اور تو جب ایک ایسے عمل کا کہنا ہے کہ، ارے، میں اس میموری کو استعمال کرنے کے لئے کرنا چاہتے ہیں، آپریٹنگ سسٹم کے لئے 4 کلو بائٹ میموری کی اس چھوٹی سی بلاک مختص کی جا رہی ہے. یہاں تک کہ اگر آپ صرف میموری کے پورے بلاک میں ایک چھوٹی سی بائٹ استعمال کرتے ہیں، آپریٹنگ سسٹم مکمل 4 کلو بائٹ دینے جا رہا ہے. تو ہے کہ اس کا مطلب کیا ہے میں کر سکتے ہیں - چلو کا کہنا ہے کہ یہ میرا اسٹیک ہے. یہ اسٹیک الگ کیا جا سکتا ہے. میرا اسٹیک میگا بائٹس اور میگا بائٹ ہو سکتی ہے. میرا اسٹیک بڑا ہو سکتا ہے. لیکن اسٹیک خود انفرادی صفحات میں تقسیم کیا گیا ہے، ، اگر ہم یہاں دیکھو کا کہنا ہے کہ یہ ہمارا RAM ہے اگر میں RAM کی 2 گیگا ہے، یہ میری RAM کے zeroth بائٹ کی طرح اصل ایڈریس 0 ہے، اور یہ 2 تمام طرح گیگا یہاں ہے. تو اس بلاک یہ صفحہ یہاں مطابق ہو سکتا ہے. اس بلاک پر اس صفحے کو یہاں کے مطابق ہو سکتا ہے. یہ ایک یہ یہاں ایک کے مطابق ہو سکتا ہے. تو آپریٹنگ سسٹم جسمانی میموری کو تفویض کرنے کے لئے آزاد ہے کسی بھی انفرادی منمانے صفحے پر. اور اس کا مطلب یہ ہے کہ اگر یہ سرحد ایک صف straddle ہوتا ہے، ایک صف کو اس کے بائیں طرف ہوتا ہے اور ایک صفحے کے اس آرڈر کی صحیح، تو اس صف جسمانی یاد میں تقسیم کیا جا رہا ہے. اور پھر جب آپ اس پروگرام چھوڑ دیا، جب عمل ختم ہو جاتا ہے، نے یہ mappings مٹ جاتے ہیں اور پھر اس کے بعد دوسری چیزوں کے لئے ان بلاکس کو استعمال کرنے کے لئے مفت ہے. مزید سوال؟ [طالب علم] پوائنٹر ریاضی. >> اوہ، جی ہاں. سلک آسان تھے، لیکن ints طرح کچھ دیکھ، تو واپس int X [4]. ، چاہے یہ ایک صف ہے یا چاہے وہ 4 integers کے malloced صف پوائنٹر ہے یہ اسی طرح کا علاج کیا جا رہا ہے. [طالب علم] تو arrays ڈھیر پر ہیں؟ [Bowden] Arrays ڈھیر پر نہیں ہیں. >> [طالب علم] اوہ. [Bowden] صف کی اس قسم اسٹیک پر جاتا جب تک آپ اس میں اعلان کیا - عالمی متغیر کو نظر انداز. عالمی متغیر کا استعمال نہ کریں. کے اندر ایک تقریب میں کہتا int X [4]. یہ اس صف کے لئے اسٹیک پر ایک بلاک 4 عددی پیدا ہو رہا ہے. لیکن یہ malloc (4 * (int) sizeof)؛ ڈھیر پر جانے کے لئے کی جا رہی ہے. لیکن بہت اسی طرح سے میں نے اس کے بعد x اور پی کا استعمال کر سکتے ہیں، مستثنیات میں نے کہا کہ پہلے آپ پی reassign کر سکتے ہیں کے مقابلے میں دوسرے تکنیکی طور پر، ان کے سائز کو کسی حد تک مختلف ہیں، لیکن اس سے مکمل طور پر غیر متعلقہ ہے. تم نے ان کے سائز کو اصل میں کبھی نہیں استعمال کریں. P میں کہہ سکتے P [3] = 2، یا X [3] = 2؛ تم نے انہیں بالکل اسی طرح سے استعمال کر سکتے ہیں. تو پوائنٹر اب ریاضی - جی ہاں. [طالب علم] کیا آپ P * اگر آپ بریکٹ کرنا نہیں ہے؟ بریکٹ شامل dereference ہیں. ٹھیک ہے. >> اصل میں، میں بھی آپ کے ساتھ کیا کہہ رہے ہو آپ کو بہوایامی arrays حاصل کر سکتے ہیں اشارہ کے ساتھ، جو آپ کر سکتے ہیں جیسے کچھ ہے، ہم کا کہنا ہے کہ، int *** PP = malloc (sizeof (int *) * 5)، میں یہ سب پہلے صرف لکھیں گے. میں وہ نہیں چاہتے تھے. ٹھیک ہے. میں یہاں کیا کیا ہے - PP [میں] ہونا چاہئے. تو پی پی ایک پوائنٹر میں ایک پوائنٹر ہے. تم پی پی mallocing 5 int ستاروں کی ایک صف کی طرف اشارہ کر رہے ہیں. تو آپ کی یاد میں اسٹیک pp. ہے 5 بلاکس ہیں جو سب خود اشارہ کی ایک صف کی طرف اشارہ ہو رہا ہے. اور پھر جب میں یہاں malloc، میں malloc کہ میں سے ہر ایک ان انفرادی اشارہ ڈھیر 4 بائٹس کی ایک علیحدہ بلاک کی طرف اشارہ کرنا چاہئے. تو 4 بائٹس اس پوائنٹس. اور ایک مختلف 4 بائٹس کو ایک پوائنٹس. اور ان میں سے سب ان کے اپنے 4 بائٹس کی طرف اشارہ ہے. اس سے کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے بہوایامی چیزوں کو کرنے کے ایک طریقہ فراہم کرتا ہے. میں PP [3] [4]، لیکن اب یہ ایک ہی بات نہیں ہے بہوایامی arrays کہہ سکتے کیونکہ بہوایامی arrays [3] [4]. X صف میں آفسیٹ واحد میں ترجمہ یہ dereferences P، تیسری انڈیکس تک رسائی حاصل کرتا ہے، تو dereferences کہ اور رسائی - 4 باطل ہو گا - دوسری انڈیکس. جبکہ جب ہم نے int X [3] [4] اس سے پہلے کے طور پر ایک کثیرالابعاد سرنی اور جب تم بریکٹ دوگنا یہ واقعی صرف ایک dereference ہے، آپ کو ایک پوائنٹر کی پیروی کر رہے ہیں تو اور آفسیٹ یہ واقعی 2D ریفرنسز ہے. آپ کے پاس 2 الگ الگ اشارہ پر عمل کریں. تو یہ بھی تکنیکی طور پر کی اجازت دیتا ہے آپ کو بہوایامی arrays پر ہر انفرادی صف مختلف سائز کہاں ہے. تو مجھے لگتا ہے کہ کنگری دار بہوایامی arrays ہے جو یہ کہتے ہیں واقعی پہلی بات کچھ 10 عناصر ہیں کی طرف اشارہ کر سکتے ہیں کے بعد، دوسری بات کچھ 100 عناصر ہیں کی طرف اشارہ کر سکتے ہیں. [طالب علم] اشارہ آپ کر سکتے ہیں کی تعداد پر کوئی حد ہے دیگر اشارہ کی طرف اشارہ کرتے ہوئے؟ >> نمبر آپ int ***** پی کر سکتے ہیں. پوائنٹر ریاضی پر واپس جائیں - >> [طالب علم] اوہ. >> جی ہاں. [طالب علم]، اگر میں int پی *** ہے اور اس کے بعد میں نے ایک محولہ لقب ضبطی کرتے ہیں اور میں کا کہنا ہے کہ P * اس کی قیمت کے برابر ہے یہ صرف محولہ لقب ضبطی 1 درجہ کیا کرنے جا رہے ہیں؟ >> جی ہاں. تو اگر میں بات یہ ہے کہ گزشتہ پوائنٹر طرف اشارہ ہے تک رسائی حاصل کرنا چاہتے ہیں - تو پھر تم *** P کرتے ہیں. ٹھیک ہے. >> تو یہ 1 بلاک، کسی دوسرے بلاک پر پوائنٹس، دوسرے بلاک پر پوائنٹس P پوائنٹس ہے. پھر اگر تم * کیا P = کچھ، تو آپ اس کو تبدیل کر رہے ہیں اب ایک مختلف بلاک کی طرف اشارہ ہے. ٹھیک ہے. >> [Bowden] اور اگر ان malloced رہے تھے، تو آپ اب میموری لیک ہے جب تک کہ آپ ان میں سے مختلف حوالوں ہو کے بعد آپ کو واپس وہ لوگ ہیں یہ نہیں ہے کہ تم صرف پھینک دیا کر سکتے ہیں. پوائنٹر ریاضی. int X [4]، 4 integers کے ایک صف مختص کی جا رہی ہے جہاں X صف کے آغاز کی طرف اشارہ کرنے جا رہا ہے. تو جب میں X [1] ایسا کچھ کا کہنا ہے کہ،، میں اس صف میں دوسری عددی مطلب چاہتے ہیں جو اس سے ہو جائے گا. لیکن سچ میں، جو صف میں 4 بائٹس ہے کیونکہ اس عددی 4 بائٹس لیتا ہے. تو 1 آفسیٹ کا کیا مطلب ہوتا ہے 1 آفسیٹ اوقات جو صف کی قسم ہے فونز. یہ integers کے ایک صف ہے، تو اس int 1 بار سائز کرنا جانتا ہے جب آفسیٹ چاہتا ہے. دوسری نحو. یاد رکھیں کہ یہ * (X + 1) کے برابر ہے. میں پوائنٹر جب + 1، جو کہ واپسی پتہ کہ پوائنٹر ذخیرہ کرنے ہے کا کہنا ہے کہ علاوہ 1 بار پوائنٹر کی قسم کا سائز ہے. X ox100 =، تو اگر تو X 1 + ox104 = اور تم نے اس کا غلط استعمال کر سکتے ہیں اور کچھ کا کہنا ہے کہ کر سکتے ہیں * چار طرح C = (چار) * X؛ اور اب سی ایکس کے طور پر ایک ہی ایڈریس پر جا رہا ہے. ج ox100 برابر کی جا رہی ہے، لیکن C 1 + ox101 کے برابر ہو جا رہا ہے چونکہ پوائنٹر ریاضی پوائنٹر کی قسم ہے کہ آپ کا اضافہ کر رہے ہیں پر منحصر ہے. تو ج 1 +، سی میں دکھائی دیتی ہے، یہ ایک چار پوائنٹر ہے، تو اس چار 1 بار سائز کو شامل کرنے جا رہا ہے، جو ہمیشہ 1 جا رہی ہے، تو آپ 101 حاصل جبکہ اگر میں ایکس، جو بھی ہے اب بھی 100، X 1 + 104 جا رہا ہے. [طالب علم] نے آپ C + + میں 1 کی طرف سے آپ پوائنٹر کو ترقی کے لئے استعمال کر سکتا ہوں؟ جی ہاں، آپ یہ کر سکتے ہیں. یہ آپ کو ایکس کے ساتھ ایسا نہیں کر سکتے ہیں کیونکہ X صرف ایک علامت ہے، مسلسل جاری ہے، آپ X تبدیل نہیں کر سکتے. لیکن سی صرف ایک پوائنٹر ہوتا ہے، تو C + + بالکل صحيح ہے، اور 1 کی طرف سے اضافہ کریں گے. اگر سی نے صرف ایک int * تھے، تو C + 104 + جائے گا. + + کرتا پوائنٹر ریاضی C + 1 پوائنٹر ریاضی کیا ہوتا ہے. یہ اصل کس طرح ضم طرح کی طرح چیزوں کی ایک بہت ہے - چیزوں کی کاپیاں بنانے کے بجائے، آپ کو اس کی بجائے منتقل کر سکتی ہیں - کی طرح ہے اس میں سے کچھ مٹانے کے دو - اگر میں صف کے اس نصف کو منتقل کرنے کی چاہتے تھے. چلو کا کہنا ہے کہ میں ایک تقریب میں صف کے اس طرف منتقل کرنا چاہتے تھے. کیا میں اس تقریب کو منتقل کریں گے؟ اگر میں X گزر، مجھے یہ پتہ گزر رہا ہوں. لیکن میں اس مخصوص ایڈریس کو منتقل کرنے کی چاہتے ہیں. تو مجھے کیا گزر چاہئے؟ [طالب علم] پوئینٹراس 2 +؟ [Bowden] تو X 2 +. جی ہاں. اس ایڈریس پر جا رہا ہے. تم نے بہت بار بار بھی اس کے طور پر نظر آئے گا، X [2] اور اس کے بعد اس کا پتہ ہے. تو آپ کو اس کا پتہ کیونکہ بریکٹ میں ایک انترنہیت dereference ہے لینے کی ضرورت ہے. X [2] سے مراد قدر ہے کہ اس کی ٹوکری میں ہے، اور پھر آپ کو اس باکس کا پتہ چاہتے ہیں، تاکہ آپ کا کہنا ہے کہ & X [2]. تو کہ ضم طرح میں کس طرح کچھ ہے جہاں آپ کو کچھ نصف فہرست کو منتقل کرنا چاہتے ہیں آپ واقعی گزر & X [2]، اور، جہاں تک پنراورتی کال کا تعلق ہے، میری نئی صف وہاں سے شروع ہوتا ہے. آخری منٹ سوالات. [طالب علم] اگر ہم ایک ایمپرسینڈ نہیں ڈال یا ایک - اس کا کیا کہا جاتا ہے؟ >> سٹار؟ [طالب علم] سٹار. >> تکنیکی طور پر، dereference آپریٹر، لیکن - >> [طالب علم] Dereference. اگر ہم ایک ستارہ یا ایک ایمپرسینڈ نہیں کرتے، اگر میں صرف Y کا کہنا ہے کہ کیا ہوتا ہے = x اور X؟ پوائنٹر ہے. Y کی قسم کیا ہے؟ >> [طالب علم] میں یہ 2 پوائنٹر کہیں گے. تو اگر آپ نے ابھی کا کہنا ہے کہ Y = X، اب X اور Y کے نقطہ ایک ہی بات ہے. >> ایک ہی چیز [طالب علم کو] پوائنٹ. اور اگر ایکس ایک int پوائنٹر ہے؟ >> یہ شکایت کی وجہ سے آپ کو اشارہ تفویض نہیں کر سکتے. [طالب علم] ٹھیک ہے. ، کہ اشارہ یاد رکھیں، اگرچہ ہم ان کے تیر کے طور پر اپنی طرف متوجہ واقعی وہ سٹور - int * X - واقعی میں تمام ایکس ذخیرہ کرنے ہے ox100 طرح کچھ ہے، جو ہم نے 100 میں محفوظ بلاک کی طرف اشارہ کرتے ہوئے کے طور پر کی نمائندگی کرنے ہو. تو جب میں کہتا ہوں کہ int * Y = X، میں صرف Y میں ox100 رہا ہوں کاپی جو ہم صرف Y کے طور پر کی نمائندگی کرنے جا رہے ہیں، بھی ox100 کی طرف اشارہ کرتے ہوئے. اور اگر میں کہتا ہوں int میں = (int) X، تو میں ذخیرہ جو ox100 کی قدر ہے جا رہا ہے کے اندر اندر اس کی، لیکن اب یہ ایک پوائنٹر کے بجائے ایک عددی کے طور پر تشریح کی جائے جا رہا ہے. لیکن آپ کو کاسٹ کی ضرورت ہے یا یہ اور شکایت جائے گا. [طالب علم] تو آپ پر ڈال مطلب ہے - کیا یہ Y X یا کاسٹنگ int int ڈال رکھا جائے جا رہے ہیں؟ [Bowden] کیا خیال ہے؟ [طالب علم] ٹھیک ہے. ان قوسین کے بعد وہاں ایک ایکس یا سوال ہو رہا ہے؟ [Bowden] یا تو. X اور Y کے برابر ہیں. >> [طالب علم] ٹھیک ہے. کیونکہ وہ دونوں اشارہ ہیں. >> جی ہاں. [طالب علم] تو اس عددی شکل میں شش اعشاری 100 جمع کریں گے؟ >> [Bowden] جی ہاں. لیکن وہ ہے جو اس کی طرف اشارہ کی قیمت نہیں. [Bowden] جی ہاں. >> [طالب علم] تو صرف عددی شکل میں پتہ ہے. ٹھیک ہے. [Bowden] اگر آپ کچھ عجیب وجہ سے چاہتے تھے، آپ کو اشارہ کے ساتھ خصوصی طور پر اور کبھی نہیں integers کے ساتھ نمٹنے کے نمٹنے کر سکتے ہیں اور صرف int * X = 0 طرح. تو پھر تم سچ میں ایک بار پوائنٹر ریاضی شروع ہو رہا الجھن ہونے جا رہے ہیں. تو تعداد کہ وہ ذخیرہ معنی ہیں. ایسا لگتا ہے کہ آپ کس طرح ان کی تشریح ختم. تو میں ایک int * سے ox100 int کی کاپی کے لئے آزاد ہوں، شاید نہیں ڈال کرنے کے لئے پر چللایا ہونے والی you're - اور میں تفویض کرنے کے لئے آزاد ہوں - میں (int *) اس صوابدیدی int * میں ox1234 طرح کچھ تفویض آزاد ہوں. تو ox123 ہے بالکل اسی طرح جیسے ایک درست میموری ایڈریس کے طور پر Y &. اور عمومی Y کچھ جو بہت ox123 ہے واپس کرنے کے ہوتا ہے. [طالب علم] ایک واقعی ڈاؤن لوڈ، اتارنا شش اعشاری سے دشملو فارم جانے کے لئے اس طرح سے کیا جائے گا، اگر آپ کو ایک پوائنٹر ہے اور تم نے اسے ایک int کے طور پر ڈالا؟ [Bowden] آپ printf کی طرح استعمال کرتے ہوئے واقعی میں پرنٹ کر سکتے ہیں. چلو کا کہنا ہے کہ میں int Y = 100 ہے. تو printf٪ (D \ N - جیسا کہ آپ کے پاس پہلے سے ہی پتہ ہونا چاہیئے - پرنٹ ہے کہ کے طور پر عددی،٪ X. ہم اس شش اعشاری کے طور پر پرنٹ کریں گے. تو پوائنٹر شش اعشاری کے طور پر محفوظ نہیں ہے، اور ایک عددی دشملو کے طور پر محفوظ نہیں ہے. سب کچھ بائنری کے طور پر محفوظ کیا جاتا ہے. یہ صرف ہے کہ ہم شش اعشاری کے طور پر اشارہ کو ظاہر کرنے کے لئے کرتے ہیں کیونکہ ہم ان 4 بائٹ بلاکس میں چیزوں کے بارے میں سوچتے ہیں، اور میموری پتوں واقف ہیں. ہم جیسے، اگر یہ BF کے ساتھ شروع ہوتا ہے، پھر اس کے بعد اسٹیک پر ہوتا ہے. تو یہ صرف شش اعشاری کے طور پر اشارہ کی ہماری تشریح ہے. ٹھیک ہے. کوئی آخری سوال؟ میں تھوڑی دیر کے لئے یہاں کے بعد اگر آپ کو کچھ اور کرنا پڑے گا. اور یہ کہ اس کے آخر ہے. [طالب علم] Yay! [تعریف] [CS50.TV]