1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [4 سیکشن - مزید آرام دہ اور پرسکون] 2 00:00:02,520 --> 00:00:04,850 [روب Bowden - ہارورڈ یونیورسٹی] 3 00:00:04,850 --> 00:00:07,370 یہ [CS50 ہے. CS50.TV] - 4 00:00:08,920 --> 00:00:13,350 ہم نے ایک گئے تمام سوالات کے کل ہے، اگر تم لوگوں کو یہ نہیں پتہ تھا. 5 00:00:14,810 --> 00:00:20,970 یہ سب کچھ آپ کو کلاس میں دیکھا جا سکتا ہے یا کلاس میں دیکھا جانا چاہئے پر بنیادی طور پر ہے. 6 00:00:20,970 --> 00:00:26,360 یہ اشارہ بھی شامل ہے، اگرچہ انہوں نے حال ہی موضوع ہیں. 7 00:00:26,360 --> 00:00:29,860 آپ کو ان میں سے اعلی سطح پر کم از کم سمجھنا چاہیئے. 8 00:00:29,860 --> 00:00:34,760 کوئی بھی چیز جو کلاس میں گیا تھا کہ آپ کو گئے تمام سوالات کے لئے سمجھنا چاہئے. 9 00:00:34,760 --> 00:00:37,320 اگر ایسا ہے تو آپ کو ان پر سوالات ہیں، تم ان کے اب پوچھ سکتے ہیں. 10 00:00:37,320 --> 00:00:43,280 لیکن یہ ایک بہت ہی طالب علم کی قیادت میں اجلاس میں ہونا کہاں جا رہے ہو تم لوگ سوال پوچھتے ہے، 11 00:00:43,280 --> 00:00:45,060 تو امید ہے کہ لوگوں نے یہ سوال ہے. 12 00:00:45,060 --> 00:00:48,020 کیا کوئی سوال ہے؟ 13 00:00:49,770 --> 00:00:52,090 جی ہاں. >> [طالب علم] اشارہ آپ کے دوبارہ جا سکتے ہیں؟ 14 00:00:52,090 --> 00:00:54,350 میں اشارہ پر جائیں گے. 15 00:00:54,350 --> 00:00:59,180 اپنے تمام متغیرات میں سے ضروری یاد میں رہتے ہیں، 16 00:00:59,180 --> 00:01:04,450 لیکن عام طور پر تم نے اس کے بارے میں فکر مت کرو اور تم صرف کا کہنا ہے کہ X 2 + Y 3 + 17 00:01:04,450 --> 00:01:07,080 اور سنکلک باہر اعداد و شمار چیزیں کہاں آپ کے لئے رہ رہے ہیں. 18 00:01:07,080 --> 00:01:12,990 ایک بار جب آپ اشارہ سے نمٹنے کے، کر رہے ہیں اور اب آپ کو واضح طور پر ان میموری پتوں کا استعمال کرتے ہوئے کر رہے ہیں. 19 00:01:12,990 --> 00:01:19,800 تو ایک ایک متغیر کبھی بھی کسی بھی وقت میں ایک پتے پر ہی زندہ رہے گا. 20 00:01:19,800 --> 00:01:24,040 اگر ہم پوائنٹر اعلان کرنا چاہتے ہیں، کس قسم کی طرح نظر آتے ہو رہا ہے؟ 21 00:01:24,040 --> 00:01:26,210 >> میں پوائنٹر P کا اعلان کرنا چاہتے ہیں. کس قسم کی طرح لگتی ہے؟ 22 00:01:26,210 --> 00:01:33,530 [طالب علم] int * P. >> جی ہاں. تو int * P. 23 00:01:33,530 --> 00:01:38,030 اور میں اسے کس طرح X کی طرف اشارہ ہے؟ >> [طالب علم] ایمپرسینڈ. 24 00:01:40,540 --> 00:01:45,300 [Bowden] تو ایمپرسینڈ لفظی آپریٹر کا پتہ کہا جاتا ہے. 25 00:01:45,300 --> 00:01:50,460 تو جب میں کہتا ہوں اور عمومی X متغیر x کی یاد ایڈریس ہو رہا ہے. 26 00:01:50,460 --> 00:01:56,790 تو اب میں پوائنٹر P ہے، اور کہیں بھی میں اپنے کوڈ میں پی * کا استعمال کر سکتے ہیں 27 00:01:56,790 --> 00:02:02,960 یا مجھے ایکس کا استعمال کرتے ہیں اور یہ بالکل وہی چیز ہو جائے گا کر سکتے ہیں. 28 00:02:02,960 --> 00:02:09,520 (P *). کیا کر رہی ہے؟ کہ ستارہ کا کیا مطلب ہے؟ 29 00:02:09,520 --> 00:02:13,120 [طالب علم] یہ اس نقطہ پر ایک قیمت کا مطلب ہے. >> جی ہاں. 30 00:02:13,120 --> 00:02:17,590 لہذا اگر ہم اس کی طرف دیکھتے ہیں، یہ بہت مفید ہو diagrams متوجہ کر سکتے ہیں 31 00:02:17,590 --> 00:02:22,230 اس x کے لیے ایک میموری کا چھوٹا باکس، جس سے 4 قیمت پر ہوتا ہے جہاں ہے، 32 00:02:22,230 --> 00:02:25,980 تو ہم پی کے لئے ایک میموری کا چھوٹا خانہ ہے، 33 00:02:25,980 --> 00:02:31,590 X P پوائنٹس، تو ہم ایکس پی سے ایک تیر اپنی طرف متوجہ. 34 00:02:31,590 --> 00:02:40,270 تو جب ہم کا کہنا ہے کہ * P ہم کہہ رہے ہیں باکس کہ پی رہے ہیں. 35 00:02:40,270 --> 00:02:46,480 سٹار تیر کی پیروی ہے اور اس کے بعد جو کچھ بھی آپ کو اس باکس کے ساتھ کرنا چاہتے ہیں وہیں. 36 00:02:46,480 --> 00:03:01,090 تو میں کہہ * P 7 = کر سکتے ہیں، اور یہ کہ باکس کہ x اور کہ 7 سے میں تبدیلی ہے. 37 00:03:01,090 --> 00:03:13,540 یا میں یہ کہنا سکتا ہے int Z = * P 2 *، یہ برامک ہے کیونکہ یہ ستارہ ستارہ،. 38 00:03:13,540 --> 00:03:19,230 ایک ستارہ P محولہ لقب ضبطی ہے، دوسرے ستارہ 2 کی طرف سے ضرب ہے. 39 00:03:19,230 --> 00:03:26,780 نوٹس میں کے ساتھ ساتھ ایکس کے ساتھ * P تبدیل کیا جا سکتا ہے. 40 00:03:26,780 --> 00:03:29,430 تم نے انہیں اسی طرح میں استعمال کر سکتے ہیں. 41 00:03:29,430 --> 00:03:38,000 اور پھر بعد میں ایک مکمل طور پر نئی چیز P نقطہ ہو سکتا ہے. 42 00:03:38,000 --> 00:03:42,190 میں صرف کہہ سکتے ہیں P = &z؛ 43 00:03:42,190 --> 00:03:44,940 تو اب X نہیں طویل پوائنٹس P، Z اشارہ ہے. 44 00:03:44,940 --> 00:03:50,510 اور کسی بھی وقت میں * P Z کر کے طور پر ایک ہی ہے. 45 00:03:50,510 --> 00:03:56,170 تو اس کے بارے میں مفید بات یہ ہے کہ ایک بار ہم افعال میں ہو رہی شروع. 46 00:03:56,170 --> 00:03:59,790 >> یہ بیکار کی طرح ہے کہ پوائنٹس پوائنٹر کچھ کرنے کا اعلان 47 00:03:59,790 --> 00:04:03,140 اور اس کے بعد آپ نے ابھی محولہ لقب ضبطی رہے ہیں 48 00:04:03,140 --> 00:04:06,060 آپ کو اصل متغیر جب استعمال کیا جا سکتا ہے کے ساتھ شروع کرنے کے لئے. 49 00:04:06,060 --> 00:04:18,190 لیکن جب آپ کے افعال میں ملتا ہے - تو ہم کا کہنا ہے کہ ہم نے کچھ تقریب، int FOO ہے، 50 00:04:18,190 --> 00:04:32,810 جو ایک پوائنٹر لیتا ہے اور صرف P * = 6 ہے. 51 00:04:32,810 --> 00:04:39,990 کی طرح ہم سویپ کے ساتھ پہلے دیکھا، آپ کو ایک مؤثر سویپ اور ایک علیحدہ تقریب نہیں کر سکتے 52 00:04:39,990 --> 00:04:45,180 صرف integers رہا ہے. کیونکہ C میں سب کچھ کو ہمیشہ قدر کی طرف سے گزر رہا ہے. 53 00:04:45,180 --> 00:04:48,360 اس وقت بھی جب آپ کو اشارہ گزر کر رہے ہیں آپ کو قدر کی طرف سے گزر رہے ہیں. 54 00:04:48,360 --> 00:04:51,940 یہ صرف اس لئے ہوتا ہے کہ ان اقدار میموری پتوں ہیں. 55 00:04:51,940 --> 00:05:00,770 تو جب میں کہتا ہوں (P) FOO، میں تقریب FOO میں پوائنٹر گزر رہا ہوں 56 00:05:00,770 --> 00:05:03,910 اور پھر FOO * 6 = P کر رہا ہے؛ 57 00:05:03,910 --> 00:05:08,600 تو اس تقریب کے اندر، P * X کے برابر ہے، 58 00:05:08,600 --> 00:05:12,720 لیکن میں اس تقریب کے اندر X استعمال نہیں کر سکتے ہیں کیونکہ یہ اس تقریب کے اندر اندر scoped نہیں ہے. 59 00:05:12,720 --> 00:05:19,510 * P = 6 ایک ہی راستہ ہے جس سے میں ایک اور تقریب کی طرف سے ایک مقامی متغیر تک رسائی حاصل کر سکتے ہیں ہے. 60 00:05:19,510 --> 00:05:23,600 یا، ویسے، اشارہ ایک ہی راستہ ہے جس سے میں ایک اور تقریب کی طرف سے ایک مقامی متغیر تک رسائی حاصل کر سکتے ہیں ہیں. 61 00:05:23,600 --> 00:05:31,600 [طالب علم] چلو، کا کہنا ہے کہ آپ پوائنٹر کو واپس کرنا چاہتا تھا. کہ تم کس طرح کرتے ہیں؟ 62 00:05:31,600 --> 00:05:44,270 int Y 3 = طرح کچھ میں [Bowden] پوائنٹر واپس، واپسی اور عمومی Y >> [طالب علم] جی ہاں. 63 00:05:44,270 --> 00:05:48,480 [Bowden] ٹھیک ہے. تمہیں ایسا نہیں کرنا چاہئے. یہ برا ہے. 64 00:05:48,480 --> 00:05:59,480 مجھے لگتا ہے کہ میں ان لیکچر سلائیڈوں میں دیکھا آپ کو میموری کی یہ پوری آریھ دیکھ کرنا شروع کر دیا 65 00:05:59,480 --> 00:06:02,880 یہاں جہاں آپ میموری کا پتہ مل گیا 0 ہے 66 00:06:02,880 --> 00:06:09,550 اور نیچے یہاں آپ میموری ایڈریس 4 32 gigs یا 2 ہے. 67 00:06:09,550 --> 00:06:15,120 تو پھر آپ کو کچھ سامان ہے اور کچھ سامان ہے اور پھر آپ اپنے اسٹیک 68 00:06:15,120 --> 00:06:21,780 اور آپ کو آپ کے ڈھیر، جس سے آپ صرف کے بارے میں سیکھ سکتے ہیں، بڑے کرنا شروع کر دیا ہے. 69 00:06:21,780 --> 00:06:24,390 [طالب علم] اسٹیک اوپر ڈھیر نہیں ہے؟ 70 00:06:24,390 --> 00:06:27,760 >> جی ہاں. ڈھیر سب سے اوپر ہے، ہے نہ؟ >> [طالب علم] ٹھیک ہے، وہ سب سے اوپر پر 0 رکھ دیا. 71 00:06:27,760 --> 00:06:30,320 [طالب علم] اوہ، وہ سب سے اوپر پر 0 رکھ دیا. >> [طالب علم] اوہ، ٹھیک ہے. 72 00:06:30,320 --> 00:06:36,060 ڈس کلیمر: کہیں بھی آپ CS50 کے ساتھ مل کر اسے اس طرح دیکھ کر جا رہے ہیں. >> [طالب علم] ٹھیک ہے. 73 00:06:36,060 --> 00:06:40,290 یہ صرف ہے آپ پہلی دفعہ جب stacks دیکھ رہے ہیں، 74 00:06:40,290 --> 00:06:45,000 پسند جب آپ اسٹیک تم آپس میں ایک دوسرے کے سب سے اوپر پر چیزیں stacking کے بارے میں سوچتے ہو کے بارے میں سوچتے. 75 00:06:45,000 --> 00:06:50,810 تو ہم کے ارد گرد اس تاکہ اسٹیک اسٹیک عام طور پر کریں گے کی طرح بڑھ رہی ہے پلٹائیں دیتے ہیں 76 00:06:50,810 --> 00:06:55,940 اسٹیک کے بجائے نیچے لٹکا ہے. >> [طالب علم] نہ ڈھیر تکنیکی بھی بڑھ اگرچہ؟ 77 00:06:55,940 --> 00:07:01,100 یہ پر انحصار کرتا ہے کیا آپ کا مطلب ہے کی طرف سے اضافہ ہے. 78 00:07:01,100 --> 00:07:04,010 اسٹیک اور ڈھیر ہمیشہ مخالف سمتوں میں اضافہ. 79 00:07:04,010 --> 00:07:09,420 ایک اسٹیک ہمیشہ احساس میں بڑھتی جا رہی ہے کہ یہ بڑا ہو رہا ہے 80 00:07:09,420 --> 00:07:12,940 کی طرف میں زیادہ میموری، پتے، اور ڈھیر نیچے بڑھ رہی ہے 81 00:07:12,940 --> 00:07:17,260 ہے کہ میں کم میموری پتوں کی طرف بڑھتی جا رہی ہے. 82 00:07:17,260 --> 00:07:20,250 تو سب سے اوپر 0 ہے اور نیچے اعلی میموری پتوں ہے. 83 00:07:20,250 --> 00:07:26,390 وہ دونوں صرف ہدایات کی مخالفت میں بڑھتے ہوئے کر رہے ہیں،. 84 00:07:26,390 --> 00:07:29,230 [طالب علم] میں صرف اس کا مطلب کیونکہ تم نے کہا تھا کہ تم نیچے اسٹیک ڈال 85 00:07:29,230 --> 00:07:33,640 کیونکہ یہ زیادہ بدیہی لگتا ہے کیونکہ اسٹیک کے لئے ڈھیر کے سب سے اوپر دیئے گئے شروع، 86 00:07:33,640 --> 00:07:37,520 ڈھیر بھی خود کے سب سے اوپر پر ہے، تو that's - >> جی ہاں. 87 00:07:37,520 --> 00:07:44,960 تم نے بھی بڑے اور بڑے ڈھیر کے بارے میں سوچتے ہیں، لیکن اسٹیک تو. 88 00:07:44,960 --> 00:07:50,280 تو اسٹیک ایک ہے کہ ہم نے اس قسم کی بڑے دکھانا چاہتے ہیں ہے. 89 00:07:50,280 --> 00:07:55,390 لیکن ہر جگہ آپ بصورت دیگر نظر آئے 0 ایڈریس پر سب سے اوپر ظاہر کی جا رہی ہے 90 00:07:55,390 --> 00:07:59,590 اور نیچے سب سے زیادہ میموری ایڈریس، تو یہ آپ کی میموری کا معمول ہے. 91 00:07:59,590 --> 00:08:02,100 >> کیا آپ کے پاس ایک سوال ہے؟ 92 00:08:02,100 --> 00:08:04,270 [طالب علم] کیا آپ ہمیں ڈھیر کے بارے میں مزید بتا سکتے ہیں؟ 93 00:08:04,270 --> 00:08:06,180 جی ہاں. میں ایک سیکنڈ میں مل جائے گا. 94 00:08:06,180 --> 00:08:12,220 سب سے پہلے، کیوں Y & واپس لوٹنے پر واپس جانے بری چیز ہے، 95 00:08:12,220 --> 00:08:18,470 اسٹیک پر آپ اسٹیک فریم جس کے افعال میں سے سب کی نمائندگی کرتے ہیں کا ایک گروپ ہے 96 00:08:18,470 --> 00:08:20,460 جس کو بلایا گیا ہے. 97 00:08:20,460 --> 00:08:27,990 گزشتہ چیزوں کو نظر انداز تو، آپ کے اسٹیک کے سب سے اوپر ہمیشہ اہم تقریب بننے جا رہا ہے 98 00:08:27,990 --> 00:08:33,090 کے بعد کہ پہلی تقریب ہے جو بلایا گیا ہے ہے. 99 00:08:33,090 --> 00:08:37,130 اور پھر جب آپ ایک اور فنکشن کال، اسٹیک نیچے بڑھ جا رہا ہے. 100 00:08:37,130 --> 00:08:41,640 ، تو اگر میں نے کچھ تقریب، FOO کہتے ہیں، اور یہ اس کے اپنے اسٹیک فریم ملتی ہے 101 00:08:41,640 --> 00:08:47,280 یہ کسی تقریب بار، کہہ سکتے ہیں، یہ اس کے اپنے اسٹیک فریم ہو جاتا ہے. 102 00:08:47,280 --> 00:08:49,840 اور بار پنراورتی ہو سکتا ہے اور یہ ہی کہہ سکتے ہیں کر سکتے ہیں، 103 00:08:49,840 --> 00:08:54,150 اور تاکہ دوسری بار کال کے اپنے اسٹیک فریم حاصل کرنے کے لئے کی جا رہی ہے. 104 00:08:54,150 --> 00:08:58,880 اور تو جو ان اسٹیک فریم میں جاتا ہے مقامی متغیرات میں سے سب ہیں 105 00:08:58,880 --> 00:09:03,450 اور تقریب دلائل کہ سب کو - 106 00:09:03,450 --> 00:09:08,730 کوئی بھی چیزیں ہیں جو مقامی طور پر اس تقریب scoped ہیں ان اسٹیک فریم میں ہیں. 107 00:09:08,730 --> 00:09:21,520 تو اس کا مطلب جب میں نے کہا کہ بار کی طرح کچھ ایک تقریب ہے، 108 00:09:21,520 --> 00:09:29,270 میں صرف ایک عددی اور اعلان اس کے بعد کہ عددی پوائنٹر واپس جا رہا ہوں. 109 00:09:29,270 --> 00:09:33,790 تو Y کہاں رہتا ہے؟ 110 00:09:33,790 --> 00:09:36,900 [طالب علم] Y بار میں رہتا ہے. >> [Bowden] جی ہاں. 111 00:09:36,900 --> 00:09:45,010 کہیں میموری کے اس چوک میں ایک littler مربع ہے کہ اس میں Y ہے ہے. 112 00:09:45,010 --> 00:09:53,370 جب میں اور Y واپس، میں میموری کا یہ چھوٹا سا بلاک پوائنٹر واپس آ رہا ہوں. 113 00:09:53,370 --> 00:09:58,400 لیکن اس وقت جب ایک تقریب کی واپسی، اس کے اسٹیک فریم popped اسٹیک ہو جاتا ہے. 114 00:10:01,050 --> 00:10:03,530 اور یہی وجہ ہے کہ اس نے اسٹیک کہتے ہیں. 115 00:10:03,530 --> 00:10:06,570 یہ اسٹیک آنکڑا ڈھانچہ کی طرح ہے، اگر آپ کو معلوم ہے کہ وہ کیا ہے. 116 00:10:06,570 --> 00:10:11,580 یا ٹرے کے اسٹیک کی طرح بھی ہمیشہ مثال ہے، 117 00:10:11,580 --> 00:10:16,060 اہم نیچے جانے کے لئے کی جا رہی ہے، تو پہلی تقریب میں تمہیں بعد میں فون اس کے سب سے اوپر پر جانے کے لئے کی جا رہی ہے، 118 00:10:16,060 --> 00:10:20,400 اور تم واپس اہم نہیں ہے جب تک کہ آپ تمام افعال جو بلایا گیا ہے سے واپس آ سکتے ہیں 119 00:10:20,400 --> 00:10:22,340 ہے جو کہ اس کے سب سے اوپر پر دے دیا گیا ہے. 120 00:10:22,340 --> 00:10:28,650 >> [طالب علم] تو اگر آپ نے اور عمومی Y کرنا، پیشگی نوٹس کے بغیر تبدیل کرنے کی اس قدر کے ساتھ مشروط ہے واپس. 121 00:10:28,650 --> 00:10:31,290 جی ہاں، it's - >> [طالب علم] یہ ادلیکھت ہو سکتا ہے. >> جی ہاں. 122 00:10:31,290 --> 00:10:34,660 یہ مکمل طور پر ہے - اگر آپ کی کوشش کرتے ہیں اور - 123 00:10:34,660 --> 00:10:38,040 یہ ایک int * بار بھی ہو کیونکہ یہ پوائنٹر واپس لوٹنے، 124 00:10:38,040 --> 00:10:41,310 تو اس کی واپسی کی قسم int * ہے. 125 00:10:41,310 --> 00:10:46,500 اگر آپ اس تقریب کی واپسی کی قیمت کو استعمال کرنے کے لئے کی کوشش کی، یہ جانچ رویہ ہے 126 00:10:46,500 --> 00:10:51,770 کیونکہ اس پوائنٹر خراب یاد کی طرف اشارہ ہے. >> [طالب علم] ٹھیک ہے. 127 00:10:51,770 --> 00:11:01,250 تو کیا ہوا اگر، مثال کے طور پر، آپ کا اعلان int * Y = malloc ((int) sizeof)؟ 128 00:11:01,250 --> 00:11:03,740 یہ بہتر ہے. جی ہاں. 129 00:11:03,740 --> 00:11:07,730 [طالب علم] ہم کس طرح کے بارے میں بات کی تھی جب ہم ہمارے ریسایکل بن چیزوں کو کھینچ کر لائیں. 130 00:11:07,730 --> 00:11:11,750 وہ اصل میں ختم نہیں کر رہے ہیں، ہم صرف ان کے اشارہ سے محروم ہے. 131 00:11:11,750 --> 00:11:15,550 تو ہم اس معاملے میں اصل قدر کرتے ہیں مٹانے یا یاد میں یہ اب بھی وہاں ہے؟ 132 00:11:15,550 --> 00:11:19,130 زیادہ تر حصے کے لئے، یہ اب بھی وہاں ہو رہا ہے. 133 00:11:19,130 --> 00:11:24,220 لیکن ہم کا کہنا ہے کہ ہم کسی دوسرے تقریب، باز کو فون پر ہو. 134 00:11:24,220 --> 00:11:28,990 باز یہاں پر اس کے اپنے اسٹیک فریم حاصل کرنے کے لئے کی جا رہی ہے. 135 00:11:28,990 --> 00:11:31,470 یہ اس چیز کے تمام overwriting جا رہا ہے، 136 00:11:31,470 --> 00:11:34,180 اور پھر اگر آپ کو بعد میں اور استعمال پوائنٹر کہ تم سے پہلے ملا کی کوشش کریں، 137 00:11:34,180 --> 00:11:35,570 یہ اسی کی قدر کرنے کا نہیں ہے. 138 00:11:35,570 --> 00:11:38,150 یہ صرف تبدیل کیونکہ آپ نے تقریب باز قرار دیا جا رہا ہے. 139 00:11:38,150 --> 00:11:43,080 [طالب علم] لیکن ہم نے ابھی تک تھا یہ نہیں کہ ہم 3 گے ملے گا؟ 140 00:11:43,080 --> 00:11:44,990 [Bowden] تمام امکانات میں، تم کروگے. 141 00:11:44,990 --> 00:11:49,670 لیکن تم نے اس پر اعتماد نہیں کر سکتے ہیں. C جانچ رویہ کہتے ہیں. 142 00:11:49,670 --> 00:11:51,920 >> [طالب علم] اوہ، یہ کرتا ہے. ٹھیک ہے. 143 00:11:51,920 --> 00:11:58,190 تو یہ جب آپ پوائنٹر کو واپس کرنا چاہتے ہیں، ہے جہاں malloc استعمال میں آتا ہے. 144 00:12:00,930 --> 00:12:15,960 اصل میں میں لکھ رہا ہوں صرف malloc واپس (3 * sizeof (int)). 145 00:12:17,360 --> 00:12:24,050 ہم ایک سیکنڈ میں malloc سے زیادہ جانے، لیکن گے malloc کے خیال ہے آپ کے مقامی متغیرات میں سے سب 146 00:12:24,050 --> 00:12:26,760 ہمیشہ اسٹیک پر جاؤ. 147 00:12:26,760 --> 00:12:31,570 کوئی بھی چیز جو malloced ہے ڈھیر پر جاتا ہے، اور یہ ڈھیر پر ہمیشہ کے لئے اور ہمیشہ رہے گا 148 00:12:31,570 --> 00:12:34,490 جب تک کہ آپ کو واضح طور پر یہ مفت ہے. 149 00:12:34,490 --> 00:12:42,130 تو اس کا مطلب یہ ہے کہ جب تم سے کچھ malloc، اس تقریب کی واپسی کے بعد سے بچنے کے لئے جا رہا ہے. 150 00:12:42,130 --> 00:12:46,800 [طالب علم] اس کے زندہ رہنے کے بعد پروگرام رک جاتا ہے چل رہا ہے؟ >> نمبر 151 00:12:46,800 --> 00:12:53,180 ٹھیک ہے، تو یہ وہاں تک پروگرام ہے سارا راستہ کیا چل رہا ہونے جا رہا ہے. >> جی ہاں. 152 00:12:53,180 --> 00:12:57,510 ہم کیا ہوتا ہے جب پروگرام رک جاتا ہے چل رہا ہوتا ہے تفصیلات جا سکتے ہیں. 153 00:12:57,510 --> 00:13:02,150 تم نے مجھے یاد دلانے کی ضرورت ہے، لیکن ہو سکتا ہے کہ مکمل طور پر ایک الگ بات ہے. 154 00:13:02,150 --> 00:13:04,190 [طالب علم] تو malloc پوائنٹر پیدا؟ >> جی ہاں. 155 00:13:04,190 --> 00:13:13,030 Malloc - >> [طالب علم] مجھے لگتا ہے کہ malloc میموری پوائنٹر کہ استعمال کر سکتے ہیں کا ایک بلاک designates. 156 00:13:15,400 --> 00:13:19,610 [Bowden] میں اس خاکہ کو دوبارہ کرنا چاہتا ہوں. >> [طالب علم] تو یہ فنکشن کام کرتا ہے، لیکن؟ 157 00:13:19,610 --> 00:13:26,430 [طالب علم] جی ہاں، malloc میموری کا ایک بلاک ہے کہ آپ استعمال کر سکتے ہیں designates، 158 00:13:26,430 --> 00:13:30,470 اور پھر یہ کہ میموری کے پہلے بلاک کا پتہ واپس. 159 00:13:30,470 --> 00:13:36,750 >> [Bowden] جی ہاں. تو جب آپ malloc، آپ میموری کے کچھ بلاک پکڑ رہے ہیں 160 00:13:36,750 --> 00:13:38,260 جو ڈھیر میں فی الحال ہے. 161 00:13:38,260 --> 00:13:43,040 اگر ڈھیر بہت چھوٹا ہے، تو ڈھیر صرف اضافہ ہو رہا ہے، اور یہ اس سمت میں اگتا ہے. 162 00:13:43,040 --> 00:13:44,650 تو چلو کا کہنا ہے کہ ڈھیر بہت چھوٹا ہے. 163 00:13:44,650 --> 00:13:49,960 پھر یہ تھوڑا سا اضافہ اور اس بلاک ہے جو صرف اضافہ ہوا پوائنٹر واپس کے بارے میں ہے. 164 00:13:49,960 --> 00:13:55,130 جب آپ مفت چیزیں، آپ کو ڈھیر میں مزید کمرے کر رہے ہیں، 165 00:13:55,130 --> 00:14:00,030 تو بعد میں malloc پر کال کہ میموری ہے کہ آپ نے پہلے آزاد کیا تھا دوبارہ استعمال کر سکتے ہیں. 166 00:14:00,030 --> 00:14:09,950 malloc اور مفت کے بارے میں اہم بات یہ ہے کہ یہ آپ کو مکمل کنٹرول دیتا ہے 167 00:14:09,950 --> 00:14:12,700 ان میموری بلاکس کی زندگی پر. 168 00:14:12,700 --> 00:14:15,420 عالمی متغیر ہمیشہ زندہ ہیں. 169 00:14:15,420 --> 00:14:18,500 مقامی متغیرات ان کے دائرہ کار کے اندر اندر زندہ ہیں. 170 00:14:18,500 --> 00:14:22,140 گھوبگھرالی منحنی خطوط وحدانی ماضی جاتے جیسے ہی مقامی متغیر مر چکے ہیں. 171 00:14:22,140 --> 00:14:28,890 Malloced میموری زندہ ہے جب تم اسے زندہ کرنا چاہتے ہیں 172 00:14:28,890 --> 00:14:33,480 اور اس کے بعد جاری کیا ہے جب تم نے اسے جاری رکھا جائے بتانا. 173 00:14:33,480 --> 00:14:38,420 وہ اصل میں صرف میموری کی 3 اقسام ہیں، واقعی. 174 00:14:38,420 --> 00:14:41,840 خودکار یاد داشت مینجمنٹ ہے، جس میں اسٹیک ہے. 175 00:14:41,840 --> 00:14:43,840 چیزیں آپ کے لئے خود کار طریقے سے ہو. 176 00:14:43,840 --> 00:14:46,910 جب آپ int ایکس کا کہنا ہے کہ، میموری int x کے لیے مختص کیا جاتا ہے. 177 00:14:46,910 --> 00:14:51,630 جب X گنجائش سے باہر جاتی ہے، میموری x کے لیے دوبارہ حاصل کیا جاتا ہے. 178 00:14:51,630 --> 00:14:54,790 پھر متحرک یاد داشت مینجمنٹ ہے، جس کا ہے جو malloc ہے ہے، 179 00:14:54,790 --> 00:14:56,740 جس کا ہے جب آپ کو کنٹرول ہے. 180 00:14:56,740 --> 00:15:01,290 آپ کو متحرک طور پر فیصلہ جب ياداشت اور چاہئے مختص نہیں رکھا جائے. 181 00:15:01,290 --> 00:15:05,050 جو اور پھر مستحکم ہے، کا مطلب صرف اتنا ہے کہ یہ ہمیشہ کے لئے رہتا ہے، 182 00:15:05,050 --> 00:15:06,610 جس کا ہے جو عالمی متغیر ہیں. 183 00:15:06,610 --> 00:15:10,240 انہوں نے یاد میں ہمیشہ ہیں. 184 00:15:10,960 --> 00:15:12,760 >> سوال؟ 185 00:15:14,490 --> 00:15:17,230 [طالب علم] آپ نے ابھی گھوبگھرالی منحنی خطوط وحدانی کا استعمال کرتے ہوئے کی طرف سے ایک بلاک کی وضاحت کر سکتا ہوں 186 00:15:17,230 --> 00:15:21,220 ہونے کی ضرورت نہیں ایک بیان یا اگر اس طرح تھوڑی دیر کا گوشوارہ یا کوئی کچھ؟ 187 00:15:21,220 --> 00:15:29,130 تم نے ایک تقریب میں ایک بلاک کی وضاحت، لیکن کر سکتے ہیں کہ گھوبگھرالی منحنی خطوط وحدانی بھی ہے. 188 00:15:29,130 --> 00:15:32,100 تو [طالب علم] آپ کو گھوبگھرالی منحنی خطوط وحدانی کی ایک بے ترتیب جوڑی کی طرح صرف اپنے کوڈ میں نہیں کر سکتے ہیں 189 00:15:32,100 --> 00:15:35,680 کہ مقامی متغیر ہے؟ >> جی ہاں، آپ یہ کر سکتے ہیں. 190 00:15:35,680 --> 00:15:45,900 int بار کے اندر ہم نے {int Y = 3؛} ہو سکتا ہے. 191 00:15:45,900 --> 00:15:48,440 وہ یہیں ہونا چاہئے. 192 00:15:48,440 --> 00:15:52,450 لیکن یہ مکمل طور پر int Y کے دائرہ کار کی وضاحت کرتا ہے. 193 00:15:52,450 --> 00:15:57,320 کہ دوسری گھوبگھرالی منحنی خطوط وحدانی کے بعد، Y اب نہیں رکھا جائے استعمال کیا جا سکتا ہے. 194 00:15:57,910 --> 00:16:00,630 آپ نے تقریبا کبھی نہیں کہا کہ ہے، تاہم. 195 00:16:02,940 --> 00:16:07,370 کیا ہوا جب ایک پروگرام ختم ہوتا ہے ہوتا ہے واپس ہو رہی ہے، 196 00:16:07,370 --> 00:16:18,760 جھوٹ ہے کہ ہم غلط فہمی / نصف کے لئے چیزوں کو آسان بنانے کی دے کی طرح ہے. 197 00:16:18,760 --> 00:16:24,410 ہم آپ کو بتاتے ہیں کہ آپ میموری جب مختص 198 00:16:24,410 --> 00:16:29,860 آپ اس متغیر کے لئے RAM میں سے کچھ حصہ آونٹیت کر رہے ہیں. 199 00:16:29,860 --> 00:16:34,190 لیکن آپ کو براہ راست نہیں کر رہے ہیں RAM آپ کے پروگراموں میں چھونے کبھی. 200 00:16:34,190 --> 00:16:37,490 اگر تمہیں اس کے بارے میں کیا سوچتے ہیں، میں کس طرح متوجہ کیا - 201 00:16:37,490 --> 00:16:44,330 اور اصل میں، اگر آپ GDB میں سے گزرنا تو آپ ایک ہی بات نظر آئے گا. 202 00:16:51,120 --> 00:16:57,590 کتنی بار آپ کو اپنے پروگرام یا کس پروگرام آپ چلا رہے ہیں چلاتے ہیں، قطع نظر 203 00:16:57,590 --> 00:16:59,950 اسٹیک ہمیشہ شروع کرنے کے لئے کی جا رہی ہے - 204 00:16:59,950 --> 00:17:06,510 آپ کو ہمیشہ پتہ oxbffff کچھ کے ارد گرد متغیر کو دیکھنے کے لئے جا رہے ہیں. 205 00:17:06,510 --> 00:17:09,470 یہ عام طور پر اس علاقے میں کہیں ہے. 206 00:17:09,470 --> 00:17:18,760 لیکن کس طرح ممکن ہے 2 پروگرام ایک ہی یاد اشارہ ہو سکتا ہے؟ 207 00:17:20,640 --> 00:17:27,650 [طالب علم] جہاں oxbfff RAM پر سمجھا جاتا ہے میں سے کچھ صوابدیدی عہدہ ہے 208 00:17:27,650 --> 00:17:31,320 ہے کہ جب تقریب میں بلایا گیا تھا کے لحاظ سے مختلف مقامات میں اصل میں ہو سکتا ہے. 209 00:17:31,320 --> 00:17:35,920 جی ہاں. مدت مجازی میموری ہے. 210 00:17:35,920 --> 00:17:42,250 خیال ہے کہ ہر ایک عمل ہے، ہر ایک پروگرام ہے کہ آپ کے کمپیوٹر پر چل رہا ہے 211 00:17:42,250 --> 00:17:49,450 اس کی اپنی ہے - مکمل طور پر آزاد ایڈریس اسپیس - 32 بٹیں فرض ہے. 212 00:17:49,450 --> 00:17:51,590 یہ پتے کی جگہ ہے. 213 00:17:51,590 --> 00:17:56,220 یہ اس کی اپنی مکمل طور پر آزاد 4 استعمال کرنے کے لئے گیگا ہے. 214 00:17:56,220 --> 00:18:02,220 >> لہذا اگر آپ کو 2 پروگراموں کے ساتھ ہی چلاتے ہیں، اس پروگرام خود 4 گیگا دیکھتا ہے، 215 00:18:02,220 --> 00:18:04,870 اس پروگرام خود 4 گیگا دیکھتا ہے، 216 00:18:04,870 --> 00:18:07,720 اور یہ اس پروگرام کے لئے dereference ناممکن پوائنٹر ہے 217 00:18:07,720 --> 00:18:10,920 اور اس پروگرام سے یاد کے ساتھ ختم. 218 00:18:10,920 --> 00:18:18,200 اور کیا مجازی میموری ہے عمل ایڈریس اسپیس سے میپنگ ہے 219 00:18:18,200 --> 00:18:20,470 RAM پر اصل باتیں. 220 00:18:20,470 --> 00:18:22,940 تو یہ آپ کے آپریٹنگ سسٹم پر ہے یہ جاننے کی، 221 00:18:22,940 --> 00:18:28,080 ہے، جب اس آدمی کو dereferences پوائنٹر oxbfff، کہ واقعی مطلب ہے کہ 222 00:18:28,080 --> 00:18:31,040 کہ وہ RAM 1000 بائٹ چاہتا ہے، 223 00:18:31,040 --> 00:18:38,150 جبکہ اگر یہ پروگرام dereferences oxbfff، وہ واقعی RAM 10000 بائٹ چاہتا ہے. 224 00:18:38,150 --> 00:18:41,590 وہ منمانے دور ہو سکتا ہے. 225 00:18:41,590 --> 00:18:48,730 یہ کسی ایک کے عمل کی ایڈریس اسپیس کے اندر اندر چیزوں کی بھی سچ ہے. 226 00:18:48,730 --> 00:18:54,770 تو جیسے ہی تمام 4 گیگا دیکھتا ہے، لیکن چلو کا کہنا ہے کہ - 227 00:18:54,770 --> 00:18:57,290 [طالب علم] ہر ایک عمل ہے - 228 00:18:57,290 --> 00:19:01,350 چلو کا کہنا ہے کہ آپ کو RAM میں سے صرف 4 گیگا بائٹ کے ساتھ ایک کمپیوٹر ہے. 229 00:19:01,350 --> 00:19:06,430 کیا ہر ایک کے عمل میں پوری 4 گیگا دیکھا ہے؟ >> جی ہاں. 230 00:19:06,430 --> 00:19:13,060 لیکن 4 گیگا اس کو دیکھتا ہے، ایک جھوٹ ہے. 231 00:19:13,060 --> 00:19:20,460 یہ صرف اس کا خیال ہے کہ یہ سب اس میموری ہے اس کی وجہ معلوم نہیں کسی دوسرے عمل موجود ہے. 232 00:19:20,460 --> 00:19:28,140 یہ صرف زیادہ سے زیادہ میموری استعمال کے طور پر یہ اصل میں ضرورت ہے. 233 00:19:28,140 --> 00:19:32,340 آپریٹنگ سسٹم کو اس عمل کو RAM دینا نہیں ہے 234 00:19:32,340 --> 00:19:35,750 اگر وہ اس پورے خطے میں کسی بھی یاد کا استعمال کرتے ہوئے نہیں ہے. 235 00:19:35,750 --> 00:19:39,300 والا یہ اس علاقے کے لئے یاد نہیں دے ہے. 236 00:19:39,300 --> 00:19:54,780 لیکن خیال یہ ہے کہ - میں کے بارے میں سوچ کی کوشش کر رہا ہوں - میں قياس کے بارے میں سوچ بھی نہیں کر سکتے. 237 00:19:54,780 --> 00:19:56,780 Analogies مشکل ہیں. 238 00:19:57,740 --> 00:20:02,700 مجازی میموری کے مسائل میں سے ایک یا ایک چیزیں اس کے حل ہے 239 00:20:02,700 --> 00:20:06,810 یہ ہے کہ اس عمل کو مکمل طور پر ایک دوسرے کے جاہل ہونا چاہئے. 240 00:20:06,810 --> 00:20:12,140 اور تو آپ کو کسی بھی پروگرام لکھ سکتے ہیں کہ کسی پوائنٹر dereferences 241 00:20:12,140 --> 00:20:19,340 کی طرح ایک ایسا پروگرام ہے جو یہ کہتا ہے کہ * (ox1234) لکھنے، 242 00:20:19,340 --> 00:20:22,890 اور کہ محولہ لقب ضبطی میموری 1234 ایڈریس. 243 00:20:22,890 --> 00:20:28,870 >> لیکن یہ آپریٹنگ سسٹم پر ہے تو کیا 1234 کا مطلب ترجمہ. 244 00:20:28,870 --> 00:20:33,960 تو 1234 اگر اس عمل کے لئے ایک درست میموری ایڈریس ہوتا ہے، 245 00:20:33,960 --> 00:20:38,800 جیسے یہ اسٹیک یا کچھ اور ہے، تو یہ کہ میموری ایڈریس کی قیمت واپس آ جائیں گے 246 00:20:38,800 --> 00:20:41,960 جہاں تک عمل جانتا ہے. 247 00:20:41,960 --> 00:20:47,520 لیکن 1234 اگر ایک درست طور پر یہ پتہ نہیں ہے، جیسا کہ زمین ہوتا ہے 248 00:20:47,520 --> 00:20:52,910 میموری میں سے کچھ چھوٹا سا ٹکڑا اسٹیک سے باہر ہے اور ڈھیر سے باہر 249 00:20:52,910 --> 00:20:57,200 اور تم سچ میں نہیں ہے تو پھر اس وقت آپ segfaults جیسی چیزوں کا استعمال کیا 250 00:20:57,200 --> 00:21:00,260 کیونکہ آپ میموری چھونے کی ہے کہ آپ کو چھو نہیں کیا جانا چاہئے کر رہے ہیں. 251 00:21:07,180 --> 00:21:09,340 یہ بھی سچ ہے - 252 00:21:09,340 --> 00:21:15,440 ایک 32 بٹ نظام، 32 بٹس کا مطلب ہے کہ آپ کے پاس ایک میموری ایڈریس کی وضاحت کرنے کے لئے 32 بٹس ہے. 253 00:21:15,440 --> 00:21:22,970 یہ کیوں ہے اشارہ 8 بائٹس ہیں کیونکہ 32 بٹیں 8 بائٹس ہیں - یا 4 بائٹس. 254 00:21:22,970 --> 00:21:25,250 نوٹیفائر 4 بائٹس ہیں. 255 00:21:25,250 --> 00:21:33,680 تو وہ ہے، جب تم oxbfffff طرح ایک پوائنٹر دیکھ - 256 00:21:33,680 --> 00:21:40,080 کسی بھی پروگرام کے اندر اندر آپ کو کسی بھی صوابدیدی پوائنٹر کی تعمیر کر سکتے ہیں، 257 00:21:40,080 --> 00:21:46,330 ffffffff - ox0 سے بیل 8 f's کہیں. 258 00:21:46,330 --> 00:21:49,180 [طالب علم] کیا نہیں ہے آپ کا کہنا ہے کہ انہوں نے 4 بائٹس ہیں؟ >> جی ہاں. 259 00:21:49,180 --> 00:21:52,730 [طالب علم] ہر بائٹ کو پھر ہو گا - >> [Bowden] شش اعشاری. 260 00:21:52,730 --> 00:21:59,360 شش اعشاری - 5، 6، 7، 8. اشارہ تو تم ہمیشہ شش اعشاری میں دیکھنے جا رہے ہیں. 261 00:21:59,360 --> 00:22:01,710 یہ صرف ہے کہ ہم کس طرح اشارہ درجہ بندی. 262 00:22:01,710 --> 00:22:05,240 شش اعشاری کا ہر 2 ہندسے 1 بائٹ ہے. 263 00:22:05,240 --> 00:22:09,600 تو 4 بائٹس کے لئے 8 شش اعشاری ہندسے ہونے جا رہا ہے. 264 00:22:09,600 --> 00:22:14,190 تو 32 بٹ نظام پر ہر ایک پوائنٹر 4 بائٹس کو ہونے جا رہا ہے، 265 00:22:14,190 --> 00:22:18,550 جس کا مطلب یہ ہے کہ آپ کو آپ کے عمل میں کسی بھی صوابدیدی 4 بائٹس کی تعمیر کر سکتے ہیں 266 00:22:18,550 --> 00:22:20,550 اور اس کا ایک پوائنٹر، 267 00:22:20,550 --> 00:22:32,730 جس کا مطلب یہ ہے کہ جہاں تک اس بات سے آگاہ ہے، یہ ایک مکمل 32 بائٹس میموری 2 سے خطاب کر سکتے ہیں. 268 00:22:32,730 --> 00:22:34,760 اگرچہ اس تک رسائی حاصل نہیں ہے، 269 00:22:34,760 --> 00:22:40,190 یہاں تک کہ اگر آپ کے کمپیوٹر صرف 512 میگا بائٹس ہے، اس کا خیال ہے کہ یہ اتنا یاد ہے. 270 00:22:40,190 --> 00:22:44,930 اور آپریٹنگ سسٹم کافی ہوشیار ہے کہ یہ صرف مختص گا جو آپ نے واقعی ضرورت ہے ہے. 271 00:22:44,930 --> 00:22:49,630 ، صرف یہ نہیں ہے جانا اوہ، ایک نیا عمل: 4 gigs. 272 00:22:49,630 --> 00:22:51,930 >> جی ہاں. >> [طالب علم] بیل کا کیا مطلب ہے؟ تم اسے کیوں لکھ سکتا ہوں؟ 273 00:22:51,930 --> 00:22:54,980 یہ صرف شش اعشاری کے لئے نشانی ہے. 274 00:22:54,980 --> 00:22:59,590 جب آپ بیل کے ساتھ ایک بڑی تعداد آغاز دیکھتے ہیں، مسلسل باتیں شش اعشاری ہیں. 275 00:23:01,930 --> 00:23:05,760 [طالب علم] آپ کیا جب ایک پروگرام ختم ہوتا ہے ہوتا ہے کے بارے میں وضاحت کر رہے تھے. >> جی ہاں. 276 00:23:05,760 --> 00:23:09,480 جب ایک پروگرام ختم ہوتا ہے ہوتا ہے وہ آپریٹنگ سسٹم ہے 277 00:23:09,480 --> 00:23:13,600 صرف mappings ہے کہ یہ ان کے پتوں کے لئے ہے، اور یہ کہ اس erases. 278 00:23:13,600 --> 00:23:17,770 آپریٹنگ سسٹم اب ایک استعمال کرنے کے لئے پروگرام ہے کہ میموری دے سکتے ہیں. 279 00:23:17,770 --> 00:23:19,490 [طالب علم] ٹھیک ہے. 280 00:23:19,490 --> 00:23:24,800 تو جب آپ کو ڈھیر یا اسٹیک یا عالمی متغیر یا کچھ کچھ مختص، 281 00:23:24,800 --> 00:23:27,010 وہ سب جیسے ہی پروگرام ختم ہوتا ہے غائب 282 00:23:27,010 --> 00:23:32,120 کیونکہ آپریٹنگ سسٹم اب اس یاد کو کسی دوسرے عمل میں دینے کے لئے آزاد ہے. 283 00:23:32,120 --> 00:23:35,150 [طالب علم] اگرچہ شاید اب بھی میں لکھا اقدار ہیں؟ >> جی ہاں. 284 00:23:35,150 --> 00:23:37,740 اقدار کا امکان اب بھی ہیں. 285 00:23:37,740 --> 00:23:41,570 یہ صرف یہ ہے ان کو حاصل کرنے کے لئے مشکل ہو جائے گا. 286 00:23:41,570 --> 00:23:45,230 یہ بہت زیادہ مشکل ہے ان کو حاصل کرنے کے لئے سے خارج کر دیا فائل کو حاصل کرنے کے لئے ہے 287 00:23:45,230 --> 00:23:51,450 کی وجہ سے خارج کر دیا فائل کی قسم میں ایک طویل وقت کے لئے وہاں بيٹھے اور ہارڈ ڈرائیو بہت بڑا ہے. 288 00:23:51,450 --> 00:23:54,120 تو اس میموری کے مختلف حصوں کو ادلیکھت ہو رہا ہے 289 00:23:54,120 --> 00:23:58,640 اس سے پہلے کہ یہ میموری کا حصہ ہے کہ اس فائل میں استعمال کیا جاتا ادلیکھت ہوتا ہے. 290 00:23:58,640 --> 00:24:04,520 لیکن مرکزی میموری، RAM، ایک تیز بہت کے ذریعے آپ سائیکل، 291 00:24:04,520 --> 00:24:08,040 تو یہ بہت تیزی سے ادلیکھت ہو رہا ہے. 292 00:24:10,300 --> 00:24:13,340 اس یا کسی اور چیز پر سوال؟ 293 00:24:13,340 --> 00:24:16,130 [طالب علم] میں ایک مختلف موضوع کے بارے میں سوالات ہیں. ٹھیک ہے. >> 294 00:24:16,130 --> 00:24:19,060 کیا کسی کو بھی اس پر سوال ہے؟ 295 00:24:20,170 --> 00:24:23,120 >> ٹھیک ہے. مختلف موضوع ہے. >> [طالب علم] ٹھیک ہے. 296 00:24:23,120 --> 00:24:26,550 میں پریکٹس ٹیسٹ کے کچھ دیکھ رہا تھا، 297 00:24:26,550 --> 00:24:30,480 اور یہ ان میں سے ایک میں sizeof کے بارے میں بات کر رہی تھی 298 00:24:30,480 --> 00:24:35,630 اور قیمت کہ اس کے فوائد یا مختلف متغیر اقسام. >> جی ہاں. 299 00:24:35,630 --> 00:24:45,060 اور اس نے کہا ہے کہ int اور طویل دونوں دونوں 4 واپسی، تو وہ دونوں 4 بائٹس طویل ہیں. 300 00:24:45,060 --> 00:24:48,070 وہاں ایک int اور ایک طویل کے درمیان کوئی فرق ہے، یا یہ ایک ہی بات ہے؟ 301 00:24:48,070 --> 00:24:50,380 جی ہاں، اس میں ایک فرق ہے. 302 00:24:50,380 --> 00:24:52,960 C معیار - 303 00:24:52,960 --> 00:24:54,950 میں شاید تک گندگی میں جا رہا ہوں. 304 00:24:54,950 --> 00:24:58,800 C معیار صرف پسند کیا C، C. کی سرکاری دستاویزات 305 00:24:58,800 --> 00:25:00,340 یہ ہے کہ یہ کیا کہتا ہے. 306 00:25:00,340 --> 00:25:08,650 C معیار صرف کا کہنا ہے کہ ہے کہ ایک چار 1 بائٹ ہمیشہ کے لئے اور ہمیشہ رہے گا. 307 00:25:10,470 --> 00:25:19,040 اس کے بعد سب کچھ - ہمیشہ ایک مختصر ہے یا اس سے زیادہ ایک چار کے برابر ہونے کے طور پر بیان کیا گیا ہے. 308 00:25:19,040 --> 00:25:23,010 یہ سختی سے بڑا، لیکن مثبت نہیں ہو سکتا ہے. 309 00:25:23,010 --> 00:25:31,940 ایک int یا اس سے زیادہ ایک مختصر کے برابر ہونے کے طور پر بیان کیا جاتا ہے. 310 00:25:31,940 --> 00:25:36,210 اور ایک طویل یا اس سے زیادہ ایک int کے برابر ہونے کے طور پر بیان کیا جاتا ہے. 311 00:25:36,210 --> 00:25:41,600 اور ایک طویل طویل یا اس سے زیادہ طویل کے برابر ہے. 312 00:25:41,600 --> 00:25:46,610 لہذا صرف ایک چیز C معیار کی وضاحت کرتا ہے ہر چیز کی رشتہ دار ترتیب ہے. 313 00:25:46,610 --> 00:25:54,880 میموری کی اصل رقم ہے جو کہ چیزوں کو لے عام طور پر عملدرآمد تک ہے، 314 00:25:54,880 --> 00:25:57,640 لیکن یہ بہت اچھی طرح اس مقام پر وضاحت کی گئی ہے. >> [طالب علم] ٹھیک ہے. 315 00:25:57,640 --> 00:26:02,490 تو شارٹس تقریبا ہمیشہ 2 بائٹس جا رہے ہیں. 316 00:26:04,920 --> 00:26:09,950 Ints تقریبا ہمیشہ 4 بائٹس کے لئے جا رہے ہیں. 317 00:26:12,070 --> 00:26:15,340 لانگ چاہتا ہے تقریبا ہمیشہ 8 بائٹس کے لئے جا رہے ہیں. 318 00:26:17,990 --> 00:26:23,160 چاہتا ہے اور، چاہے آپ کو ایک 32 بٹ یا 64 بٹ نظام کا استعمال کرتے ہوئے کر رہے ہیں پر منحصر ہے. 319 00:26:23,160 --> 00:26:27,450 تو ایک طویل نظام کی قسم کے مطابق کی جا رہی ہے. 320 00:26:27,450 --> 00:26:31,920 اگر آپ کو آلات کی طرح ایک 32 بٹ نظام کا استعمال کرتے ہوئے کر رہے ہیں، اس 4 بائٹس کو ہونے جا رہا ہے. 321 00:26:34,530 --> 00:26:42,570 اگر آپ کو حال ہی میں کمپیوٹر کی ایک بہت کی طرح ایک 64 بٹ کا استعمال کرتے ہوئے کر رہے ہیں، یہ 8 بائٹس کو ہونے جا رہا ہے. 322 00:26:42,570 --> 00:26:45,230 >> Ints تقریبا ہمیشہ ہی اس وقت 4 بائٹس ہیں. 323 00:26:45,230 --> 00:26:47,140 لانگ چاہتا ہے تقریبا ہمیشہ 8 بائٹس ہیں. 324 00:26:47,140 --> 00:26:50,300 ماضی میں، ints صرف 2 بائٹس تھے. 325 00:26:50,300 --> 00:26:56,840 نوٹس لیکن ہے کہ اس سے بڑی اور برابر ان تعلقات کی مکمل طور پر سب مطمئن ہے. 326 00:26:56,840 --> 00:27:01,280 تو طویل عرصے سے بالکل ایک عددی طور پر ایک ہی سائز کے کرنے کی اجازت ہے، 327 00:27:01,280 --> 00:27:04,030 اور یہ بھی ایک طویل طویل کے طور پر ایک ہی سائز کے کرنے کی اجازت ہے. 328 00:27:04,030 --> 00:27:11,070 اور یہ صرف اس لئے ہے کہ نظام کے 99،999 فی صد میں، یہ برابر ہو جا رہا ہے ہے 329 00:27:11,070 --> 00:27:15,800 یا تو ایک int یا ایک طویل طویل ہے. یہ صرف 32 بٹ یا 64 بٹ پر انحصار کرتا ہے. >> [طالب علم] ٹھیک ہے. 330 00:27:15,800 --> 00:27:24,600 floats میں بٹس کی شرائط میں نامزد دشملو نقطہ ہے؟ 331 00:27:24,600 --> 00:27:27,160 بائنری کے طور پر کی طرح ہے؟ >> جی ہاں. 332 00:27:27,160 --> 00:27:30,570 آپ CS50 کے لئے جاننے کی ضرورت نہیں ہے. 333 00:27:30,570 --> 00:27:32,960 آپ کہ 61 میں بھی نہیں سیکھتے ہیں. 334 00:27:32,960 --> 00:27:37,350 آپ کسی بھی کورس میں سچ میں یہ جاننے کے لئے نہیں ہے. 335 00:27:37,350 --> 00:27:42,740 یہ صرف ایک نمائندگی ہے. 336 00:27:42,740 --> 00:27:45,440 میں عین مطابق تھوڑا الاٹمنٹ بھول جاتے ہیں. 337 00:27:45,440 --> 00:27:53,380 چل نقاط کا خیال یہ ہے کہ آپ بٹس کی ایک مخصوص تعداد کی نمائندگی مختص - 338 00:27:53,380 --> 00:27:56,550 بنیادی طور پر، سب کچھ سائنسی سنکیتن میں ہے. 339 00:27:56,550 --> 00:28:05,600 تو آپ بٹس کی ایک مخصوص تعداد میں 1،2345 طرح تعداد خود کی نمائندگی مختص. 340 00:28:05,600 --> 00:28:10,200 میں 5 سے زیادہ ہندسوں کے ساتھ کبھی بھی ایک بڑی تعداد کی نمائندگی نہیں کر سکیں گے. 341 00:28:12,200 --> 00:28:26,300 تو پھر تم بھی بٹس کی ایک مخصوص تعداد میں مختص تاکہ اس طرح ہونا جاتا 342 00:28:26,300 --> 00:28:32,810 ، آپ کو صرف ایک مخصوص تعداد میں، اس طرح کی سب سے بڑی مائپادک ہے جو آپ کر سکتے ہیں ہے جا سکتے ہیں 343 00:28:32,810 --> 00:28:36,190 اور آپ صرف ایک مخصوص مائپادک جا سکتے ہیں، 344 00:28:36,190 --> 00:28:38,770 چاہتے ہیں کہ سب سے چھوٹی مائپادک ہے جو آپ کر سکتے ہیں ہے. 345 00:28:38,770 --> 00:28:44,410 >> مجھے یاد نہیں عین مطابق راستہ بٹس ان تمام اقدار کے تفویض کیے گئے ہیں، 346 00:28:44,410 --> 00:28:47,940 بٹس کی ایک مخصوص تعداد میں 1،2345 کے لئے وقف ہیں، 347 00:28:47,940 --> 00:28:50,930 بٹس کی ایک مخصوص تعداد مائپادک کے لئے وقف ہیں، 348 00:28:50,930 --> 00:28:55,670 اور یہ صرف اس صورت میں ممکن ہے ایک خاص سائز کی ایک مائپادک کی نمائندگی کرنے کے لئے. 349 00:28:55,670 --> 00:29:01,100 [] طالب علم اور ایک ڈبل؟ ایک اضافی طویل فلوٹ کی طرح ہے؟ >> جی ہاں. 350 00:29:01,100 --> 00:29:07,940 یہ اب آپ 4 بائٹس کی بجائے 8 بائٹس کا استعمال کرتے ہوئے کر رہے ہیں سوائے ایک فلوٹ کے طور پر ایک ہی بات ہے. 351 00:29:07,940 --> 00:29:11,960 اب آپ 9 ہندسے یا 10 ہندسے کو استعمال کرنے کے لئے کے قابل ہو جائے گا، 352 00:29:11,960 --> 00:29:16,630 اور اس کی بجائے 300 100 کرنے کے قابل ہو جائے گا. >> [طالب علم] ٹھیک ہے. 353 00:29:16,630 --> 00:29:21,550 اور floats بھی 4 بائٹس ہیں. >> جی ہاں. 354 00:29:21,550 --> 00:29:27,520 ویسے، ایک بار پھر، یہ شاید عام عمل پر مجموعی طور پر انحصار کرتی ہے، 355 00:29:27,520 --> 00:29:30,610 لیکن floats 4 بائٹس ہیں، ڈبلز 8 ہیں. 356 00:29:30,610 --> 00:29:33,440 ڈبلز ڈبل بلایا کیونکہ وہ ڈبل floats کا سائز کر رہے ہیں. 357 00:29:33,440 --> 00:29:38,380 [طالب علم] ٹھیک ہے. اور وہاں ڈبل ڈبلز رہے ہیں؟ >> نہیں ہیں. 358 00:29:38,380 --> 00:29:43,660 مجھے لگتا ہے کہ - طویل چاہتا ہے کی طرح >> [طالب علم] >> جی ہاں. میں ایسا نہیں سوچتا. جی ہاں. 359 00:29:43,660 --> 00:29:45,950 [طالب علم گزشتہ سال کے امتحان] مرکزی تقریب کے بارے میں ایک سوال یہ تھا 360 00:29:45,950 --> 00:29:49,490 آپ کے پروگرام کے حصہ کے طور پر کی ہے. 361 00:29:49,490 --> 00:29:52,310 جواب تھا کہ یہ آپ کے پروگرام کا حصہ نہیں ہے. 362 00:29:52,310 --> 00:29:55,100 کس صورتحال میں؟ یہی ہے جو میں نے دیکھا. 363 00:29:55,100 --> 00:29:59,090 [Bowden] ایسا لگتا ہے - >> [طالب علم] کیا صورت حال ہے؟ 364 00:29:59,090 --> 00:30:02,880 کیا آپ کو کوئی مسئلہ ہے؟ >> [طالب علم] ہاں، ہاں، میں یہ ضرور اوپر ھیںچو کر سکتے ہیں. 365 00:30:02,880 --> 00:30:07,910 یہ نہیں ہے، تکنیکی طور پر، لیکن بنیادی طور پر یہ ہو رہا ہے. 366 00:30:07,910 --> 00:30:10,030 [طالب علم] میں ایک مختلف سال ایک دیکھا. 367 00:30:10,030 --> 00:30:16,220 یہ صحیح یا غلط کی طرح تھا: ایک درست - >> اوہ، سی فائل ہے؟ 368 00:30:16,220 --> 00:30:18,790 [طالب علم] کوئی بھی سی فائل ہونا ضروری ہے - [ایک ہی وقت میں دونوں بولنے - unintelligible] 369 00:30:18,790 --> 00:30:21,120 ٹھیک ہے. تو وہ الگ ہے. 370 00:30:21,120 --> 00:30:26,800 >> سی فائل صرف افعال کو کنٹرول کرنے کی ضرورت ہے. 371 00:30:26,800 --> 00:30:32,400 آپ کو مشین کوڈ میں ایک فائل ہے، بائنری، جو کچھ بھی مرتب کر سکتے ہیں، 372 00:30:32,400 --> 00:30:36,620 بغیر کارکردگی ابھی تک ہے. 373 00:30:36,620 --> 00:30:39,420 ایک درست کارکردگی ایک مرکزی تقریب ہونا ضروری ہے. 374 00:30:39,420 --> 00:30:45,460 آپ 1 فائل میں 100 کام کرتا ہے لیکن کوئی اہم لکھ سکتے ہیں 375 00:30:45,460 --> 00:30:48,800 اور پھر بائنری اسے نیچے مرتب، 376 00:30:48,800 --> 00:30:54,460 تو پھر آپ دوسری فائل ہے جو صرف اہم ہے لکھتے ہیں لیکن یہ ان کے افعال میں سے ایک گروپ کا مطالبہ 377 00:30:54,460 --> 00:30:56,720 یہاں یہ بائنری فائل میں. 378 00:30:56,720 --> 00:31:01,240 اور اس طرح ہے کہ جب آپ کارکردگی قابل بنا رہے ہیں، کیا linker کرتا ہے 379 00:31:01,240 --> 00:31:05,960 ہے یہ ان 2 بائنری فائلوں کو ایک executable میں یکجا کیا گیا ہے. 380 00:31:05,960 --> 00:31:11,400 تو سی فائل. ایک اہم تقریب میں کرنے کی ضرورت کی ضرورت نہیں ہے. 381 00:31:11,400 --> 00:31:19,220 اور آپ کو بڑی کوڈ اڈوں پر ہزاروں C فائلوں. اور 1 اہم فائل کی نظر آئے گی. 382 00:31:23,960 --> 00:31:26,110 مزید سوال؟ 383 00:31:29,310 --> 00:31:31,940 [طالب علم] ایک سوال کے جواب میں تھا. 384 00:31:31,940 --> 00:31:36,710 اس نے کہا کہ ایک سنکلک بنانے. صحیح یا غلط؟ 385 00:31:36,710 --> 00:31:42,030 اور جواب غلط تھا، اور میں سمجھ کیوں بجنا طرح نہیں ہے. 386 00:31:42,030 --> 00:31:44,770 لیکن ہم کیا کہتے ہیں اگر یہ نہیں ہے؟ 387 00:31:44,770 --> 00:31:49,990 بنیادی طور پر صرف - میں دیکھ رہا ہوں یہ بالکل وہی جو یہ مطالبہ کر سکتے ہیں. 388 00:31:49,990 --> 00:31:52,410 لیکن یہ صرف حکم چلاتی ہے. 389 00:31:53,650 --> 00:31:55,650 بنائیں. 390 00:31:58,240 --> 00:32:00,870 میں اس کو روکنا کر سکتے ہیں. جی ہاں. 391 00:32:10,110 --> 00:32:13,180 اوہ، جی ہاں. بھی بنائیں کہ کرتا ہے. 392 00:32:13,180 --> 00:32:17,170 اس کا کہنا ہے کہ شرنگار افادیت کا مقصد خود کار طریقے سے اس بات کا تعین کرنا ہے 393 00:32:17,170 --> 00:32:19,610 جو ایک بڑے پروگرام کے ٹکڑے recompiled رکھا جائے کرنے کی ضرورت ہے 394 00:32:19,610 --> 00:32:22,350 اور حکم ان recompile جاری ہے. 395 00:32:22,350 --> 00:32:27,690 آپ کو فائلوں ہیں جو بالکل بڑی کر سکتے ہیں. 396 00:32:27,690 --> 00:32:33,210 فائلوں کی وقت کے ٹکٹ میں بنائیں لگتا ہے، اور جیسا کہ ہم نے پہلے کہا، 397 00:32:33,210 --> 00:32:36,930 آپ کو انفرادی فائلوں مرتب نیچے، اور کر سکتے ہیں جب تک کہ آپ linker حاصل کرنے کے لئے نہیں ہے 398 00:32:36,930 --> 00:32:39,270 کہ وہ ایک دوسرے کے ساتھ ایک executable میں مل جل کر ڈال رہے ہیں. 399 00:32:39,270 --> 00:32:43,810 اگر ایسا ہے تو آپ کو 10 مختلف فائلوں ہیں اور آپ ان میں سے 1 تبدیلی، 400 00:32:43,810 --> 00:32:47,870 تو جو کرنے کے لئے کیا جا رہا ہے صرف recompile ہے کہ 1 فائل 401 00:32:47,870 --> 00:32:50,640 اور پھر سب مل کر relink. 402 00:32:50,640 --> 00:32:53,020 لیکن یہ اس سے کہیں dumber ہے. 403 00:32:53,020 --> 00:32:55,690 یہ آپ پر منحصر ہے مکمل طور پر کی وضاحت کرنے کے کہ وہ کیا کرنا چاہئے. 404 00:32:55,690 --> 00:32:59,560 یہ ڈیفالٹ کی طرف سے اس وقت سٹیمپ سامان کو تسلیم کرنے کی صلاحیت ہے، 405 00:32:59,560 --> 00:33:03,220 لیکن آپ کو شرنگار فائل کو لکھنے کے لیے کچھ بھی کر سکتے ہیں. 406 00:33:03,220 --> 00:33:09,150 آپ کو ایک فائل بنانا تاکہ جب آپ کو یہ صرف CD دوسرے ڈائریکٹری بنانے ٹائپ کریں. لکھ سکتے ہیں 407 00:33:09,150 --> 00:33:15,560 میں مایوس ہو رہی ہے کیونکہ اپنے آلات کے اندر میں سمت سب کچھ 408 00:33:15,560 --> 00:33:21,740 اور پھر میں میک سے PDF کو دیکھنے کے. 409 00:33:21,740 --> 00:33:30,720 >> ، اس لئے میں فائنڈر اور میں مت جاؤ کر سکتے ہیں، سرور سے رابطہ 410 00:33:30,720 --> 00:33:36,950 اور سرور میں مربوط میرا آلات ہے، اور اس کے بعد میں نے پی ڈی ایف کھولنے 411 00:33:36,950 --> 00:33:40,190 لیٹیکس کی طرف سے مرتب کیا جاتا ہے. 412 00:33:40,190 --> 00:33:49,320 لیکن میں ہو رہی تھی مایوس، ہر ایک وقت میں پی ڈی ایف کو تازہ کرنے کی ضرورت ہے کیونکہ 413 00:33:49,320 --> 00:33:53,900 میں اسے ایک مخصوص ڈائریکٹری ہے کہ اس تک رسائی حاصل کر سکتے ہیں کرنے کے لئے کاپی تھا 414 00:33:53,900 --> 00:33:57,710 اور یہ پریشان ہو رہی تھی. 415 00:33:57,710 --> 00:34:02,650 تو بجائے میں نے فائل، جس سے آپ کی وضاحت کس طرح یہ چیزیں بناتا ہے ہے لکھا. 416 00:34:02,650 --> 00:34:06,130 آپ کس طرح بناتے ہیں یہ PDF لیٹیکس ہے. 417 00:34:06,130 --> 00:34:10,090 صرف کسی دوسرے شرنگار فائل کی طرح - یا مجھے لگتا ہے کہ آپ کو فائلوں کو نہیں دیکھا ہے 418 00:34:10,090 --> 00:34:13,510 لیکن ہم آلات میں ایک عالمی شرنگار فائل ہے جو صرف کا کہنا ہے کہ ہے، 419 00:34:13,510 --> 00:34:16,679 اگر آپ کو ایک سی فائل مرتب کر رہے ہیں، بجنا کا استعمال کریں. 420 00:34:16,679 --> 00:34:20,960 اور، تو یہاں میرے شرنگار فائل میں ہے کہ میں میں کہتا 421 00:34:20,960 --> 00:34:25,020 اس فائل کو آپ PDF لیٹیکس کے ساتھ مرتب کرنا چاہتے ہیں کے لئے جا رہے ہیں. 422 00:34:25,020 --> 00:34:27,889 اور اس طرح یہ PDF لیٹیکس کہ مرتب کر رہی ہے. 423 00:34:27,889 --> 00:34:31,880 ہے نہیں مرتب ہے. یہ صرف ترتیب میں مخصوص میں یہ حکم دیتا ہے چل رہا ہے. 424 00:34:31,880 --> 00:34:36,110 تو یہ PDF لیٹیکس چلتا ہے، یہ ڈائریکٹری میں اس پر کاپی کرنا چاہتے ہیں کی نقول، 425 00:34:36,110 --> 00:34:38,270 یہ سی ڈی ڈائریکٹری میں اور دوسری چیزوں ہے، 426 00:34:38,270 --> 00:34:42,380 لیکن یہ سب کرتا ہے جب ایک فائل کی تبدیلیوں کو تسلیم کیا جاتا ہے، 427 00:34:42,380 --> 00:34:45,489 اور اگر یہ تبدیل، تو یہ حکم دیتا ہے کہ اس پر چلانے والا ہے چلے گا 428 00:34:45,489 --> 00:34:48,760 جب فائل تبدیلیاں. >> [طالب علم] ٹھیک ہے. 429 00:34:50,510 --> 00:34:54,420 مجھے پتہ نہیں کہاں عالمی شرنگار فائلوں ہیں میرے لئے یہ چیک کرنے کے لیے ہے. 430 00:34:57,210 --> 00:35:04,290 دیگر سوال؟ ماضی سے کچھ quizzes ہے؟ کوئی پوائنٹر باتیں؟ 431 00:35:06,200 --> 00:35:08,730 طرح اشارہ کے ساتھ ٹھیک ٹھیک چیزیں ہیں - 432 00:35:08,730 --> 00:35:10,220 میں جا رہا ہوں اس پر ایک گئے تمام سوالات کے سوال تلاش کرنے کے قابل ہو جائے کرنے کے لئے نہیں کر رہا ہوں - 433 00:35:10,220 --> 00:35:16,250 لیکن صرف ایک چیز کے بارے میں اس طرح کی طرح. 434 00:35:19,680 --> 00:35:24,060 اس بات کا یقین کریں کہ کہ تم سمجھ سکتا ہوں جب میں کہتا ہوں کہ int * X * Y - 435 00:35:24,890 --> 00:35:28,130 یہ بالکل نہیں ہے یہاں کچھ ہے، مجھے لگتا ہے. 436 00:35:28,130 --> 00:35:32,140 لیکن جیسے * X * Y، ان 2 متغیر اسٹیک پر ہیں ہیں. 437 00:35:32,140 --> 00:35:37,220 میں کہتا ہوں کہ جب X = malloc (sizeof (int))، X اب بھی اسٹیک پر ایک متغیر ہے، 438 00:35:37,220 --> 00:35:41,180 کی malloc ڈھیر میں کچھ بلاک ہے، اور ہم ڈھیر پر X نقطہ کر رہے ہیں. 439 00:35:41,180 --> 00:35:43,900 >> تو ڈھیر اسٹیک پوائنٹس پر کچھ. 440 00:35:43,900 --> 00:35:48,100 جب بھی تم نے کچھ malloc، آپ لامحالہ یہ ایک پوائنٹر کے اندر ذخیرہ کرنے کر رہے ہیں. 441 00:35:48,100 --> 00:35:55,940 تو اس پوائنٹر اسٹیک ہے، malloced بلاک ڈھیر پر ہے. 442 00:35:55,940 --> 00:36:01,240 بہت سے لوگوں کی ایک الجھن میں جاتے ہیں اور کا کہنا ہے کہ int * X = malloc، X ڈھیر پر ہے. 443 00:36:01,240 --> 00:36:04,100 نہیں. کیا X اشارہ ڈھیر پر ہے. 444 00:36:04,100 --> 00:36:08,540 X خود اسٹیک پر ہے، جب تک آپ کو کسی بھی وجہ سے ایکس ایک عالمی متغیر ہو، 445 00:36:08,540 --> 00:36:11,960 جس صورت میں میموری کا ایک اور علاقے میں ہوتا ہے. 446 00:36:13,450 --> 00:36:20,820 ٹریک رکھنے کے تو ان باکس اور تیر diagrams کوئز کے لئے میں بہت عام ہیں. 447 00:36:20,820 --> 00:36:25,740 یا اگر یہ کوئز 0 نہیں ہے 1 کوئز ہو جائے گا. 448 00:36:27,570 --> 00:36:31,940 آپ ان میں سے سب کو معلوم ہے، انتخاب میں اقدامات 449 00:36:31,940 --> 00:36:35,740 کے بعد آپ ان سوالات کا جواب تھا. جی ہاں. 450 00:36:35,740 --> 00:36:38,940 >> ضرور - [طالب علم] ہم ان اقدامات سے جا سکتے ہیں. 451 00:36:48,340 --> 00:36:58,640 اقدامات اور انتخاب سے پہلے کہ ہم preprocessing ہے، 452 00:36:58,640 --> 00:37:16,750 مرتب، جمع، اور لنک. 453 00:37:16,750 --> 00:37:21,480 Preprocessing. اس کا کیا کرتا ہے؟ 454 00:37:29,720 --> 00:37:32,290 یہ سب سے آسان میں قدم ہے - اچھی طرح نہیں - 455 00:37:32,290 --> 00:37:35,770 اس کا یہ مطلب یہ نہیں ہے یہ واضح ہونا چاہئے، لیکن یہ سب سے آسان قدم ہے. 456 00:37:35,770 --> 00:37:38,410 تم لوگ اپنے آپ پر عملدرآمد کر سکتے ہیں. جی ہاں. 457 00:37:38,410 --> 00:37:43,410 [طالب علم] لے لو آپ اپنے اس طرح شامل ہیں اور اس وقت اور نقل بھی وضاحت کرتا ہے. 458 00:37:43,410 --> 00:37:49,250 # شامل کی طرح چیزوں کے لئے لگ رہا ہے اور # وضاحت، 459 00:37:49,250 --> 00:37:53,800 اور یہ صرف کاپیاں اور pastes وہ کیا اصل مطلب. 460 00:37:53,800 --> 00:37:59,240 تو جب آپ کا کہنا ہے کہ # cs50.h شامل پریپروسیسر کاپی اور پیسٹ cs50.h ہے 461 00:37:59,240 --> 00:38:01,030 اس لائن میں. 462 00:38:01,030 --> 00:38:06,640 پریپروسیسر جب آپ کا کہنا ہے کہ # X 4 کے کی وضاحت، پورے پروگرام کے ذریعے جاتا ہے 463 00:38:06,640 --> 00:38:10,400 اور 4 کے ساتھ X کے تمام مثالوں کی جگہ لے لیتا ہے. 464 00:38:10,400 --> 00:38:17,530 تو پریپروسیسر ایک درست C فائل لیتا ہے اور ایک درست C فائل نتائج 465 00:38:17,530 --> 00:38:20,300 چیزیں کہاں ہے کاپی اور چسپاں. 466 00:38:20,300 --> 00:38:24,230 تو اب انتخاب. اس کا کیا کرتا ہے؟ 467 00:38:25,940 --> 00:38:28,210 [طالب علم] C سے بائنری جاتا ہے. 468 00:38:28,210 --> 00:38:30,970 >> [Bowden] یہ بائنری تمام طرح نہیں کرتا. 469 00:38:30,970 --> 00:38:34,220 [طالب علم] پھر مشین کوڈ؟ >> یہ مشین کوڈ نہیں ہے. 470 00:38:34,220 --> 00:38:35,700 [طالب علم] اسمبلی؟ >> اسمبلی 471 00:38:35,700 --> 00:38:38,890 یہ اسمبلی جاتا ہے اس سے پہلے کہ C کوڈ راستہ جاتا ہے، 472 00:38:38,890 --> 00:38:45,010 اور سب سے زیادہ زبانوں کچھ اس طرح کرتے ہیں. 473 00:38:47,740 --> 00:38:50,590 اعلی سطح کے کسی بھی زبان کو اٹھا لو، اور اگر تم اس کے مرتب کرنے جا رہے ہیں، 474 00:38:50,590 --> 00:38:52,390 اقدامات میں مرتب ہونے کا امکان ہے. 475 00:38:52,390 --> 00:38:58,140 پہلے C ازگر پر مرتب ہو رہا ہے، تو اس اسمبلی C مرتب جا رہا ہے، 476 00:38:58,140 --> 00:39:01,600 اور اس کے بعد اسمبلی بائنری ترجمہ کرنے کے لئے کی جا رہی ہے. 477 00:39:01,600 --> 00:39:07,800 تو انتخاب C سے اسمبلی میں لانے کی جا رہی ہے. 478 00:39:07,800 --> 00:39:12,130 مرتب لفظ عام طور پر ایک اعلی سطح سے لانے کا مطلب ہے کہ 479 00:39:12,130 --> 00:39:14,340 ایک کم درجے کی پروگرامنگ زبان ہے. 480 00:39:14,340 --> 00:39:19,190 تو یہ تالیف میں صرف قدم ہے جہاں آپ کو ایک اعلی درجے کی زبان کے ساتھ شروع 481 00:39:19,190 --> 00:39:23,270 اور کم سطح کے ایک زبان میں ختم ہے، اور یہی وجہ ہے کہ قدم مرتب کہا جاتا ہے. 482 00:39:25,280 --> 00:39:33,370 انتخاب کے دوران طالب علم []، کا کہنا ہے کہ آپ # شامل کیا ہے cs50.h. 483 00:39:33,370 --> 00:39:42,190 سنکلک recompile cs50.h،، کام کرتا ہے جو وہاں ہے کی طرح 484 00:39:42,190 --> 00:39:45,280 اور یہ کہ اسمبلی کے کوڈ میں بھی طور پر ترجمہ، 485 00:39:45,280 --> 00:39:50,830 یا یہ ایسی چیز ہے جس سے پہلے اسمبلی کی کاپی اور پیسٹ کریں گے؟ 486 00:39:50,830 --> 00:39:56,910 cs50.h بہت خوبصورت اسمبلی میں کبھی ختم نہیں کرے گا. 487 00:39:59,740 --> 00:40:03,680 تقریب prototypes اور چیزوں کی طرح مواد کے لئے آپ کو محتاط رہنا. 488 00:40:03,680 --> 00:40:09,270 اس کی ضمانت دیتا ہے کہ سنکلک چیزوں کو چیک کرنے کے لیے جیسے تم کام کرتا ہے بلا رہے ہو کر سکتے ہیں 489 00:40:09,270 --> 00:40:12,910 حق واپسی کی قسم اور صحیح دلائل اور سامان کے ساتھ. 490 00:40:12,910 --> 00:40:18,350 >> تو cs50.h فائل میں رکھا جائے preprocessed گا، اور اس کے بعد جب یہ انتخاب ہے 491 00:40:18,350 --> 00:40:22,310 یہ بنیادی طور پر دور پھینک دیا کے بعد یہ اس بات کا یقین کر لیں کہ کہ سب کچھ کیا جا رہا ہے صحیح طریقے سے کہا جاتا بنا دیتا ہے. 492 00:40:22,310 --> 00:40:29,410 لیکن CS50 لائبریری میں بیان کیا کام کرتا ہے، جو cs50.h سے الگ ہیں، 493 00:40:29,410 --> 00:40:33,610 ان لوگوں کو الگ الگ مرتب نہیں رکھا جائے گا. 494 00:40:33,610 --> 00:40:37,270 اس سے منسلک قدم میں اصل میں آئے گا، تو ہم ایک سیکنڈ میں مل جائے گا. 495 00:40:37,270 --> 00:40:40,100 لیکن اس سے پہلے، کیا جمع ہے؟ 496 00:40:41,850 --> 00:40:44,500 [طالب علم] بائنری پر اسمبلی؟ >> جی ہاں. 497 00:40:46,300 --> 00:40:48,190 جمع. 498 00:40:48,190 --> 00:40:54,710 ہم اس انتخاب کو فون نہیں ہے، کیونکہ اسمبلی بہت بائنری کا ایک خالص ترجمہ ہے. 499 00:40:54,710 --> 00:41:00,230 اسمبلی سے بائنری جانے میں بہت کم منطق ہے. 500 00:41:00,230 --> 00:41:03,180 یہ صرف ایک ٹیبل میں تلاش کی طرح ہے، اوہ، ہم نے یہ ہدایات ہے؛ 501 00:41:03,180 --> 00:41:06,290 01110 بائنری کے مساوی ہے. 502 00:41:10,200 --> 00:41:15,230 اور اس طرح فائلوں ہے کہ عام طور پر جمع نتائج ہیں. اے فائلوں. 503 00:41:15,230 --> 00:41:19,020 اور او فائلیں ہیں جو ہم سے پہلے کہہ رہے تھے، 504 00:41:19,020 --> 00:41:21,570 ایک فائل ایک اہم تقریب ہے کہ ضرورت نہیں ہے. 505 00:41:21,570 --> 00:41:27,640 کوئی بھی فائل جب تک یہ ایک درست C فائل ہے کے طور پر اے فائل. رکھا جائے مرتب کیا جا سکتا ہے. 506 00:41:27,640 --> 00:41:30,300 یہ نیچے اے. مرتب کیا جا سکتا ہے. 507 00:41:30,300 --> 00:41:43,030 اب، منسلک ہے جو اصل میں کا ایک گروپ پڑتا ہے اے فائلوں اور انہیں ایک executable لاتا ہے. 508 00:41:43,030 --> 00:41:51,110 اور تو کیا ملانے والی ہے یہ ہے تم سے لائبریری کا CS50 اے فائل. کے طور پر سوچ سکتے ہیں. 509 00:41:51,110 --> 00:41:56,980 یہ ایک پہلے ہی مرتب کی بائنری فائل ہے. 510 00:41:56,980 --> 00:42:03,530 اور اس طرح جب آپ کو آپ کی فائل، اپنے hello.c، جو GetString مطالبہ تالیف، 511 00:42:03,530 --> 00:42:06,360 hello.c hello.o مرتب ہو جاتا ہے، 512 00:42:06,360 --> 00:42:08,910 hello.o بائنری میں ہے. 513 00:42:08,910 --> 00:42:12,830 یہ GetString کا استعمال کرتا ہے، تو اس cs50.o کو جانے کی ضرورت ہے، 514 00:42:12,830 --> 00:42:16,390 اور linker ان کے ساتھ smooshes اور اس فائل میں GetString نقل 515 00:42:16,390 --> 00:42:20,640 اور ایک executable ہے کہ تمام افعال کو اس کی ضرورت ہے کے ساتھ باہر آتا ہے. 516 00:42:20,640 --> 00:42:32,620 تو cs50.o اصل میں نہیں ہے ایک اے فائل، لیکن اس کے قریب کافی ہے کہ کوئی بنیادی فرق ہے. 517 00:42:32,620 --> 00:42:36,880 تو منسلک فائلوں کا ایک گروپ کو ایک ساتھ لاتی ہے 518 00:42:36,880 --> 00:42:41,390 جو علیحدہ علیحدہ افعال میں سے تمام پر مشتمل میں استعمال کرنے کی ضرورت ہے 519 00:42:41,390 --> 00:42:46,120 اور کارکردگی قابل ہے کہ اصل میں چلے گا پیدا کرتا ہے. 520 00:42:48,420 --> 00:42:50,780 >> اور اس طرح یہ بھی ہے جو ہم پہلے کہہ رہے تھے 521 00:42:50,780 --> 00:42:55,970 جہاں آپ 1000 سی فائلوں کر سکتے ہیں، تم ان سب کو مرتب کرنے کے لئے اے فائلوں. 522 00:42:55,970 --> 00:43:00,040 جو شاید تھوڑی دیر لے جائے گا، تو آپ 1 تبدیل سی فائل. 523 00:43:00,040 --> 00:43:05,480 تم صرف. 1 C فائل اور پھر relink باقی سب recompile کرنے کی ضرورت ہے، 524 00:43:05,480 --> 00:43:07,690 سب کچھ واپس مل کر لنک. 525 00:43:09,580 --> 00:43:11,430 [طالب علم] جب ہم منسلک ہم lcs50 لکھ رہے ہیں؟ 526 00:43:11,430 --> 00:43:20,510 جی ہاں، تو lcs50. linker کہ پرچم سگنل میں کہا گیا ہے کہ آپ کو اس لائبریری میں رکھا جائے منسلک کیا جانا چاہئے. 527 00:43:26,680 --> 00:43:28,910 سوال؟ 528 00:43:41,310 --> 00:43:46,860 کیا ہم پہلی درس میں 5 سیکنڈ سے بھی دوسرے بائنری کے ہو گئے ہو؟ 529 00:43:50,130 --> 00:43:53,010 میں ایسا نہیں سوچتا. 530 00:43:55,530 --> 00:43:58,820 آپ بڑے OS کے تمام پتہ ہونا چاہیئے کہ ہم ختم ہو گئے ہو، 531 00:43:58,820 --> 00:44:02,670 اور آپ کو کرنے کے قابل ہو، اگر ہم نے آپ کو ایک تقریب میں دیا جانا چاہئے، 532 00:44:02,670 --> 00:44:09,410 آپ کہتے ہیں کہ یہ بڑا O ہے، تقریبا کے قابل ہونا چاہئے. یا اچھی طرح، بڑا O کچا ہے. 533 00:44:09,410 --> 00:44:15,300 تو اگر آپ نے چیزوں کے بارے میں اتنی ہی تعداد پر looping loops کے لئے اندر در اندر دیکھو، 534 00:44:15,300 --> 00:44:22,260 طرح int میں، میں <ن؛ int J، J > مربع [طالب علم] N. >> ن مربع ہو جاتا ہے. 535 00:44:22,260 --> 00:44:25,280 اگر آپ ٹرپل اندر در اندر ہے، ن cubed جاتا ہے. 536 00:44:25,280 --> 00:44:29,330 تو بات اس طرح آپ کو فوری طور پر باہر کی طرف اشارہ کرنے کے قابل ہونا چاہئے. 537 00:44:29,330 --> 00:44:33,890 آپ کو اندراج کی طرح اور بلبلا طرح جاننا اور ترتیب دیں اور ان میں سے سب کو ضم کرنے کی ضرورت ہے. 538 00:44:33,890 --> 00:44:41,420 یہ آسان ہے سمجھنے کی وجہ سے وہ ان (ن) مربع اور (ن) کے لاگ ان ن اور اس کی سب 539 00:44:41,420 --> 00:44:47,810 کیونکہ مجھے لگتا ہے کہ ایک کوئز ایک سال جہاں ہم بنیادی طور پر آپ کو دی تھی 540 00:44:47,810 --> 00:44:55,050 بلبلا طرح کی ایک عمل درآمد اور کہا، "اس تقریب کی رننگ ٹائم کیا ہے؟" 541 00:44:55,050 --> 00:45:01,020 تو اگر آپ یہ بلبلا طرح کے طور پر سمجھتے ہیں، تو آپ کو این مربع فوری طور پر کہہ سکتے ہیں. 542 00:45:01,020 --> 00:45:05,470 لیکن اگر آپ صرف اسے دیکھو، آپ کو یہ بلبلا طرح کا احساس بھی نہیں کی ضرورت ہے؛ 543 00:45:05,470 --> 00:45:08,990 تم صرف یہ اور یہ کر رہا ہے کہہ سکتے ہیں. یہ مربع ن ہے. 544 00:45:12,350 --> 00:45:14,710 [طالب علم] کوئی سخت مثال کے طور پر آپ کے ساتھ آ سکتا ہے، 545 00:45:14,710 --> 00:45:20,370 باہر figuring کا بھی اسی طرح خیال کی طرح؟ 546 00:45:20,370 --> 00:45:24,450 >> مجھے نہیں لگتا ہے کہ ہم آپ کے ذہن میں کوئی مشکل مثالیں دینا ہوں گے. 547 00:45:24,450 --> 00:45:30,180 بلبلا طرح کی چیز کے بارے میں سخت ہے ہم کے طور پر جائیں گے، 548 00:45:30,180 --> 00:45:36,280 اور یہاں تک کہ جب تک آپ سمجھتے ہیں کہ آپ صف پر iterating رہے ہیں 549 00:45:36,280 --> 00:45:41,670 صف میں ہر عنصر کے لئے، جو کچھ کہ مربع ن ہے جا رہا ہے. 550 00:45:45,370 --> 00:45:49,940 یہیں جیسے عمومی سوالات ہم ہیں - اوہ. 551 00:45:55,290 --> 00:45:58,530 دوسرے دن، ڈوگ نے ​​دعوی کیا، "میں ایک الگورتھم ہے جو ایک صف ترتیب کر سکتے ہیں ایجاد ہے 552 00:45:58,530 --> 00:46:01,780 "O (لاگ ان ن) کا وقت! ن کی تعداد کے" 553 00:46:01,780 --> 00:46:04,900 تو ہم جانتے ہیں کہ کس طرح یہ ناممکن ہے؟ 554 00:46:04,900 --> 00:46:08,850 [اشراوی طالب علم کے جواب] >> جی ہاں. 555 00:46:08,850 --> 00:46:13,710 بہت کم سے کم، آپ صف میں ہر عنصر کے دلوں کو چھو ہے، 556 00:46:13,710 --> 00:46:16,210 تو یہ ناممکن ہے ایک صف ترتیب - 557 00:46:16,210 --> 00:46:20,850 اگر سب کچھ ناچھانٹا ہوا ترتیب میں ہے، تو آپ صف میں سب کچھ کو چھونے جا رہے ہیں، 558 00:46:20,850 --> 00:46:25,320 تو یہ ناممکن ہے اسے این اے سے کم وقت میں. 559 00:46:27,430 --> 00:46:30,340 [طالب علم] آپ ہمیں ہے کہ این اے میں ایسا کرنے کے قابل ہونے کی مثال سے ظاہر ہوتا ہے. 560 00:46:30,340 --> 00:46:33,920 اگر آپ کو میموری کا ایک بہت استعمال کرتے ہیں. >> جی ہاں. 561 00:46:33,920 --> 00:46:37,970 اور that's - میں بھول گیا ہے that's - اس طرح گنتی کر رہا ہے؟ 562 00:46:47,360 --> 00:46:51,330 ہمم. یہ ایک عددی چھنٹائی الگورتھم ہے. 563 00:46:59,850 --> 00:47:05,100 میں نے اس کے لئے خصوصی نام کے لئے تلاش کر رہا تھا کہ گزشتہ ہفتے میں یاد نہیں کر سکا. 564 00:47:05,100 --> 00:47:13,000 جی ہاں. یہ قسم کی قسم جو بڑا این اے میں چیزوں کو پورا کر سکتے ہیں ہیں. 565 00:47:13,000 --> 00:47:18,430 لیکن اس کی حدود ہیں، جیسے تم integers صرف ایک مخصوص تعداد میں استعمال کر سکتے ہیں. 566 00:47:20,870 --> 00:47:24,560 پلس اگر آپ کچھ that's کو الگ الگ کرنے کی کوشش کر رہے ہیں - 567 00:47:24,560 --> 00:47:30,750 اگر آپ صف 012، -12، 151، 4 ملین ہے، 568 00:47:30,750 --> 00:47:35,120 تو یہ ایک عنصر مکمل طور پر پورے چھنٹائی برباد کرنے کی جا رہی ہے. 569 00:47:42,060 --> 00:47:44,030 >> سوال؟ 570 00:47:49,480 --> 00:47:58,870 [طالب علم] اگر آپ کو ایک پنراورتی تقریب ہے اور یہ صرف پنراورتی کالز کرتا ہے 571 00:47:58,870 --> 00:48:02,230 واپسی بیان کے اندر اندر، جو دم سے پنراورتی ہے، 572 00:48:02,230 --> 00:48:07,360 اور تاکہ رن ٹائم کے دوران نہیں میموری استعمال کرے گی 573 00:48:07,360 --> 00:48:12,550 یا کم از کم یہ موازنہ میموری کا استعمال کرتے ہوئے کے طور پر حل تکراری گے؟ 574 00:48:12,550 --> 00:48:14,530 [Bowden] جی ہاں. 575 00:48:14,530 --> 00:48:19,840 یہ کسی حد تک سست ہونے کا امکان، لیکن سچ میں نہیں ہو گا. 576 00:48:19,840 --> 00:48:23,290 پنراورتی پونچھ کے بہت اچھا ہے. 577 00:48:23,290 --> 00:48:32,640 اسٹیک فریم میں دوبارہ کی تلاش میں ہے، چلو کا کہنا ہے کہ ہم اہم ہے 578 00:48:32,640 --> 00:48:42,920 اور ہم int بار (int X) یا کچھ اور ہے. 579 00:48:42,920 --> 00:48:52,310 یہ ایک کامل پنراورتی تقریب نہیں ہے، لیکن واپسی کا بار (X - 1). 580 00:48:52,310 --> 00:48:57,620 تو ظاہر ہے، یہ نظم و ضبط میں بہت سی خامیاں ہیں جن کی بنا پر ہے. آپ کے پاس بیس مقدمات اور سامان کی ضرورت ہے. 581 00:48:57,620 --> 00:49:00,360 لیکن یہاں کا خیال ہے کہ یہ پنراورتی دم ہے، 582 00:49:00,360 --> 00:49:06,020 جب اہم کالز بار ہے کہ اس کے اسٹیک فریم حاصل کرنے کے لئے جا رہا ہے جس کا مطلب ہے. 583 00:49:09,550 --> 00:49:12,440 اس اسٹیک فریم میں میموری کا ایک چھوٹا سا بلاک ہونے جا رہا ہے 584 00:49:12,440 --> 00:49:17,490 ہے کہ اس کی دلیل ایکس کے مساوی ہے. 585 00:49:17,490 --> 00:49:25,840 اور اس طرح ہم کا کہنا ہے کہ مرکزی بار (100) کال کرنے کے لئے ہوتا ہے؛ 586 00:49:25,840 --> 00:49:30,050 تو X 100 کے طور پر شروع کی جا رہی ہے. 587 00:49:30,050 --> 00:49:35,660 اگر سنکلک تسلیم کرتا ہے کہ یہ ایک کی دم پنراورتی تقریب ہے، 588 00:49:35,660 --> 00:49:38,540 پھر جب بار اپنی پنراورتی کال بار بناتا ہے، 589 00:49:38,540 --> 00:49:45,490 ایک نئے اسٹیک فریم، جس میں جہاں اسٹیک بڑی حد تک بڑھتی ہوئی شروع کرنے کی بجائے، 590 00:49:45,490 --> 00:49:48,220 بالآخر اس ڈھیر میں چلائیں اور اس کے بعد آپ کو segfaults ملے گا 591 00:49:48,220 --> 00:49:51,590 کیونکہ میموری colliding شروع ہوتا ہے. 592 00:49:51,590 --> 00:49:54,830 >> اس کے اپنے اسٹیک فریم بنانے کے بجائے، اس کا احساس کر سکتے ہیں، 593 00:49:54,830 --> 00:49:59,080 ارے، میں اس اسٹیک فریم میں واپس آنے کی واقعی کبھی نہیں کی ضرورت ہے، 594 00:49:59,080 --> 00:50:08,040 تو بجائے میں 99 کے ساتھ اس بحث اور اس کے بعد کی جگہ بار سے زائد شروع کریں گے. 595 00:50:08,040 --> 00:50:11,810 اور پھر اسے دوبارہ کرتے ہیں اور اس کی واپسی کی بار تک پہنچ جائے گی (X - 1) 596 00:50:11,810 --> 00:50:17,320 اور یہ ایک نیا اسٹیک فریم بنانے کی بجائے 98 کے ساتھ اس کی موجودہ دلیل کی جگہ لے لیں گے 597 00:50:17,320 --> 00:50:20,740 اور پھر بار کے آغاز پر واپس کود جاؤ. 598 00:50:23,860 --> 00:50:30,430 وہ آپریشن، اسٹیک پر 1 قیمت کو تبدیل کرنے اور شروع کرنے کے لئے واپس کود 599 00:50:30,430 --> 00:50:32,430 کافی موثر ہیں. 600 00:50:32,430 --> 00:50:41,500 تو نہ صرف یہ ایک علیحدہ تقریب کے طور پر ایک ہی میموری استعمال ہے جس میں تکراری ہے ہے 601 00:50:41,500 --> 00:50:45,390 کیونکہ آپ کو صرف 1 اسٹیک فریم کا استعمال کرتے ہوئے کر رہے ہیں، لیکن آپ downsides مبتلا نہیں کر رہے ہیں 602 00:50:45,390 --> 00:50:47,240 افعال کو فون کرنے کے لئے. 603 00:50:47,240 --> 00:50:50,240 کالنگ افعال کو کسی حد تک مہنگی ہو کر سکتے ہیں کیونکہ اس سیٹ اپ کرنا ہے 604 00:50:50,240 --> 00:50:52,470 teardown اور یہ سب. 605 00:50:52,470 --> 00:50:58,160 تو یہ دم کی تکرار اچھا ہے. 606 00:50:58,160 --> 00:51:01,170 [طالب علم] یہ نئے اقدامات کیوں پیدا نہیں کرتا؟ 607 00:51:01,170 --> 00:51:02,980 کیونکہ یہ پتہ چلتا ہے، اس کی ضرورت نہیں ہے. 608 00:51:02,980 --> 00:51:07,800 بار کال صرف پنراورتی کال واپس آ رہا ہے. 609 00:51:07,800 --> 00:51:12,220 تو اس کی واپسی قیمت کے ساتھ کچھ کرنے کی ضرورت نہیں ہے. 610 00:51:12,220 --> 00:51:15,120 یہ صرف فوری طور پر اس پر واپس جا رہا ہے. 611 00:51:15,120 --> 00:51:20,530 تو یہ صرف اس کی اپنی دلیل کو تبدیل کرنے اور پھر سے شروع ہو رہا ہے. 612 00:51:20,530 --> 00:51:25,780 اور یہ بھی، اگر آپ کی دم پنراورتی ورژن نہیں ہے 613 00:51:25,780 --> 00:51:31,460 تو پھر آپ ان تمام سلاخوں کے جہاں جب اس بار کو واپس حاصل 614 00:51:31,460 --> 00:51:36,010 اس سے اس کی قیمت واپس کرنے کے لئے، تو اس بار فوری طور پر واپس 615 00:51:36,010 --> 00:51:39,620 اور یہ اس سے اس کی قیمت واپس، تو یہ صرف فوری طور پر واپس کرنے جا رہا ہے 616 00:51:39,620 --> 00:51:41,350 اور یہ ایک اس کی قیمت واپس. 617 00:51:41,350 --> 00:51:45,350 تو کیا تم ان چیزوں کے تمام اسٹیک پوپ آؤٹ اس کی بچت کر رہے ہیں 618 00:51:45,350 --> 00:51:48,730 سے واپسی قیمت صرف پورے راستے منظور بیک اپ رکھا جائے ویسے بھی جا رہا ہے. 619 00:51:48,730 --> 00:51:55,400 تو ہماری دلیل کو اپ ڈیٹ دلیل کے ساتھ کیوں نہیں کی جگہ لے لے اور پھر سے شروع ہے؟ 620 00:51:57,460 --> 00:52:01,150 اگر تقریب دم پنراورتی نہیں ہے، اگر آپ کی طرح کچھ کرنا - 621 00:52:01,150 --> 00:52:07,530 [طالب علم] اگر بار (X 1 +). >> جی ہاں. 622 00:52:07,530 --> 00:52:11,770 >> تو اگر آپ اس حالت میں ڈال دیا، تو آپ کی واپسی کی قیمت کے ساتھ کچھ کر رہے ہیں. 623 00:52:11,770 --> 00:52:16,260 یا یہاں تک کہ اگر آپ صرف 2 واپسی کرتے ہیں * بار (X - 1). 624 00:52:16,260 --> 00:52:23,560 تو اب بار (X - 1) ترتیب میں واپس کرنے کی ضرورت ہے کے لئے اس کی 2 مرتبہ قدر کا حساب، 625 00:52:23,560 --> 00:52:26,140 لہذا اب یہ اس کی اپنی علیحدہ اسٹیک فریم کی ضرورت ہے، 626 00:52:26,140 --> 00:52:31,180 اور اب، کوئی بات نہیں آپ کو کس طرح مشکل کوشش کرتے ہیں، آپ کو کرنے کی ضرورت پر جا رہے ہیں - 627 00:52:31,180 --> 00:52:34,410 اس دم نہیں ہے پنراورتی. 628 00:52:34,410 --> 00:52:37,590 [طالب علم] میں تکرار کو ایک دم تکرار کے لئے مقصد لانے کی کوشش کرے گا - 629 00:52:37,590 --> 00:52:41,450 [Bowden] ایک مثالی دنیا میں CS50 میں، لیکن آپ کے پاس نہیں ہے. 630 00:52:43,780 --> 00:52:49,280 کے لئے دم کی تکرار کو حاصل کرنے کے لئے، عام طور پر، آپ کو ایک اضافی دلیل قائم 631 00:52:49,280 --> 00:52:53,550 بار Y میں جہاں int ایکس لے جائے گا 632 00:52:53,550 --> 00:52:56,990 اور Y آخری چیز جو آپ کو واپس کرنا چاہتے ہیں کے مساوی ہے. 633 00:52:56,990 --> 00:53:03,650 (- 1 X)، 2 * Y تو پھر یہ آپ کے بار واپس لوٹنے پر جا رہے ہیں. 634 00:53:03,650 --> 00:53:09,810 تو یہ صرف ایک اعلی سطح کے کہ تم ان چیزوں کو کس طرح دم پنراورتی تبدیل. 635 00:53:09,810 --> 00:53:13,790 لیکن اضافی دلیل - 636 00:53:13,790 --> 00:53:17,410 اور پھر آخر میں جب آپ کو آپ کی بیس کیس تک پہنچنے کے ہیں، آپ نے ابھی Y واپس 637 00:53:17,410 --> 00:53:22,740 کیونکہ آپ کو ہے سارا وقت واپسی قیمت جو آپ چاہتے ہیں کو جمع. 638 00:53:22,740 --> 00:53:27,280 آپ کی قسم ہے گیا iteratively کر لیکن پنراورتی کالز کا استعمال کرتے ہوئے. 639 00:53:32,510 --> 00:53:34,900 سوال؟ 640 00:53:34,900 --> 00:53:39,890 جب تاروں کا استعمال کرتے ہوئے کی طرح ہو سکتا ہے کہ پوائنٹر ریاضی کے بارے میں [طالب علم]،. >> ضرور. 641 00:53:39,890 --> 00:53:43,610 پوائنٹر ریاضی. 642 00:53:43,610 --> 00:53:48,440 جب تاروں کا استعمال کرتے ہوئے یہ آسان ہے کیونکہ ڈور چار ستاروں ہیں، 643 00:53:48,440 --> 00:53:51,860 حروف ہمیشہ کے لئے اور ہمیشہ کسی ایک بائٹ ہیں، 644 00:53:51,860 --> 00:53:57,540 اور اس پوائنٹر ریاضی باقاعدہ ریاضی جب آپ ڈور کے ساتھ کام کر رہے ہو کے برابر ہے. 645 00:53:57,540 --> 00:54:08,790 چلو صرف اتنا کہنا چار کے * = "ہیلو". 646 00:54:08,790 --> 00:54:11,430 تو ہم یاد میں ایک بلاک ہے. 647 00:54:19,490 --> 00:54:22,380 6 بائٹس کی ضرورت ہے کیونکہ آپ نے ہمیشہ اتارنا null مختتم کی ضرورت ہے. 648 00:54:22,380 --> 00:54:28,620 اور چار * کے اس صف کے آغاز کی طرف اشارہ کرنے جا رہا ہے. 649 00:54:28,620 --> 00:54:32,830 تو <وہاں اشارہ. 650 00:54:32,830 --> 00:54:36,710 اب، یہ بنیادی طور پر کسی بھی صف کس طرح کام کرتا ہے ہے، 651 00:54:36,710 --> 00:54:40,780 سے قطع نظر چاہے وہ malloc کی طرف سے یا چاہے وہ اسٹیک ہے واپسی تھا. 652 00:54:40,780 --> 00:54:47,110 کوئی بھی صف بنیادی طور پر صف کے آغاز پر ایک پوائنٹر ہے، 653 00:54:47,110 --> 00:54:53,640 اور اس کے بعد کسی بھی صف آپریشن، کسی بھی تخکرمن، صرف اس صف میں جا رہا ہے ایک مخصوص آفسیٹ. 654 00:54:53,640 --> 00:55:05,360 >> تو جب میں نے [3] کی طرح کچھ کا کہنا ہے کہ؛ اس کے جا رہا ہے اور اندر 3 حروف کی گنتی 655 00:55:05,360 --> 00:55:12,490 تو [3]، ہم 0 ہے، 1، 2، 3، تو [3] یہ L سے رجوع کرنے جا رہا ہے. 656 00:55:12,490 --> 00:55:20,460 [طالب علم] اور ہم + S 3 کر اور پھر قوسین ستارہ کی طرف سے ایک ہی قدر تک پہنچ سکتا ہے؟ 657 00:55:20,460 --> 00:55:22,570 جی ہاں. 658 00:55:22,570 --> 00:55:26,010 یہ * (زبانیں + 3) کے برابر ہے؛ 659 00:55:26,010 --> 00:55:31,240 اور یہ کہ ہمیشہ کے لئے اور ہمیشہ کے برابر کوئی بات نہیں ہے جو تم کرتے ہو. 660 00:55:31,240 --> 00:55:34,070 آپ بریکٹ نحو کو استعمال کرنے کے لئے کبھی نہیں کی ضرورت ہے. 661 00:55:34,070 --> 00:55:37,770 آپ * ہمیشہ نحو (زبانیں 3 +) کا استعمال کر سکتے ہیں. 662 00:55:37,770 --> 00:55:40,180 لوگ بریکٹ نحو کو پسند کرتے ہیں، اگرچہ. 663 00:55:40,180 --> 00:55:43,860 [طالب علم] لہذا تمام arrays اصل میں صرف اشارہ ہیں. 664 00:55:43,860 --> 00:55:53,630 تھوڑا سا فرق ہے جب میں نے کا کہنا ہے کہ int X [4]. >> [طالب علم] کیا کہ میموری پیدا؟ 665 00:55:53,630 --> 00:56:03,320 [Bowden] اسٹیک 4 ints تشکیل دیں، تو 16 بائٹس مجموعی جا رہا ہے. 666 00:56:03,320 --> 00:56:05,700 اسٹیک 16 بائٹس پیدا ہو رہا ہے. 667 00:56:05,700 --> 00:56:09,190 X کہیں بھی محفوظ نہیں ہے. 668 00:56:09,190 --> 00:56:13,420 یہ صرف ایک بات کے آغاز کا حوالہ دیتے علامت ہے. 669 00:56:13,420 --> 00:56:17,680 کیونکہ آپ کو اس جشن کے اندر صف کا اعلان کیا، 670 00:56:17,680 --> 00:56:22,340 کیا سنکلک کرنے جا رہی ہے صرف متغیر x کی تمام مثالوں کی جگہ لے لیں 671 00:56:22,340 --> 00:56:26,400 جہاں یہ ان 16 بائٹس کو منتخب کرنے کے لئے ہوا ہے. 672 00:56:26,400 --> 00:56:30,040 یہ چار کے ساتھ * کی علامت ہے کہ نہیں کر سکتے ہیں کیونکہ ایک حقیقی پوائنٹر ہے. 673 00:56:30,040 --> 00:56:32,380 یہ تو دوسری چیزوں کی طرف اشارہ ہے. 674 00:56:32,380 --> 00:56:36,140 X مسلسل جاری ہے. تم یہ ایک مختلف صف کی طرف اشارہ نہیں کر سکتے. >> [طالب علم] ٹھیک ہے. 675 00:56:36,140 --> 00:56:43,420 لیکن یہ خیال اس تخکرمن، اسی سے قطع نظر یہ ہے کہ کیا یہ ایک روایتی صف ہے 676 00:56:43,420 --> 00:56:48,230 یا اگر اس سے کچھ یا اگر پوائنٹر ہے یہ ایک malloced صف پوائنٹر ہے. 677 00:56:48,230 --> 00:56:59,770 اور اصل میں، یہ تو برابر ہے کہ وہ بھی ایک ہی بات ہے ہے. 678 00:56:59,770 --> 00:57:05,440 یہ اصل میں ترجمہ کیا بریکٹ کے اندر ہے اور کیا خانے کے چھوڑ دیا ہے، 679 00:57:05,440 --> 00:57:07,970 انہیں ایک دوسرے کے ساتھ جوڑتا ہے، اور dereferences. 680 00:57:07,970 --> 00:57:14,710 تو یہ صرف کے طور پر کے طور پر درست ہے * (+ 3) یا کے [3]. 681 00:57:16,210 --> 00:57:22,090 [طالب علم] آپ arrays 2 جہتی کے کی طرف اشارہ کرتے ہوئے اشارہ کر سکتا ہے؟ 682 00:57:22,090 --> 00:57:27,380 >> یہ مشکل ہے. روایتی طور پر، نہیں. 683 00:57:27,380 --> 00:57:34,720 ایک صف 2 جہتی صرف کچھ آسان نحو کے ساتھ ایک صف 1 جہتی ہے 684 00:57:34,720 --> 00:57:54,110 کیونکہ جب میں کہتا ہوں کہ int X [3] [3]، یہ واقعی میں صرف 9 اقدار سے 1 صف ہے. 685 00:57:55,500 --> 00:58:03,000 اور اس طرح جب میں انڈیکس، سنکلک جانتا ہے کہ میرا کیا مطلب ہے. 686 00:58:03,000 --> 00:58:13,090 اگر میں کہتا ہوں X [1] [2]، یہ جانتا ہے کہ میں دوسری قطار میں جانے کے لئے چاہتے ہیں، تو یہ پہلی 3 پر جا رہا ہے 687 00:58:13,090 --> 00:58:17,460 اور اس کے بعد یہ دوسری بات ہے کہ میں، تو اس ایک کو حاصل کرنے کے لئے جا رہا ہے کی ضرورت ہے. 688 00:58:17,460 --> 00:58:20,480 لیکن یہ اب بھی صرف ایک صف ایک جہتی ہے. 689 00:58:20,480 --> 00:58:23,660 اور اگر ایسا ہے تو میں اس صف پر ایک پوائنٹر کی وضاحت کرنا چاہتا تھا، 690 00:58:23,660 --> 00:58:29,770 میں کہتا ہوں int * P = X گے. 691 00:58:29,770 --> 00:58:33,220 X کی قسم ہے - 692 00:58:33,220 --> 00:58:38,280 یہ X کے بولڈ ہوئے کہا کہ قسم ہے کیونکہ یہ صرف ایک علامت ہے اور یہ ایک حقیقی متغیر نہیں ہے، 693 00:58:38,280 --> 00:58:40,140 لیکن یہ صرف ایک int * ہے. 694 00:58:40,140 --> 00:58:44,840 X صرف اس کے آغاز پر ایک پوائنٹر ہے. >> [طالب علم] ٹھیک ہے. 695 00:58:44,840 --> 00:58:52,560 اور اس میں [1] [2] تک رسائی حاصل کرنے کے قابل نہیں ہو گا. 696 00:58:52,560 --> 00:58:58,370 مجھے لگتا ہے کہ پوائنٹر اعلان کرنے کے لئے خصوصی نحو ہے، 697 00:58:58,370 --> 00:59:12,480 int طرح مضحکہ خیز کچھ (* P [- بالکل مضحکہ خیز چیز مجھے یہ بھی پتہ نہیں ہے. 698 00:59:12,480 --> 00:59:17,090 لیکن وہاں قوسین اور چیزوں کے ساتھ طرح اشارہ اعلان کے لئے ایک نحوی ہے. 699 00:59:17,090 --> 00:59:22,960 یہ بھی نہیں کہ تم دیتے ہو سکتا ہے. 700 00:59:22,960 --> 00:59:26,640 میں کچھ تو ہے جو مجھے سچ بتاو گے میں واپس دیکھ سکتا ہے. 701 00:59:26,640 --> 00:59:34,160 میں بعد میں اس کے لئے نظر آئے گا، اگر اس نقطہ نظر کے لئے ایک نحوی ہے. لیکن تم نے اسے دیکھا کبھی نہیں کریں گے. 702 00:59:34,160 --> 00:59:39,670 اور نحو بھی تو قدیمی ہے کہ اگر آپ اس کا استعمال کرتے ہیں، لوگوں کو ہکا بکا رہ جانیوالے رکھا جائے گا. 703 00:59:39,670 --> 00:59:43,540 بہوایامی arrays خوبصورت نایاب ہیں کے طور پر ہے. 704 00:59:43,540 --> 00:59:44,630 تم بہت زیادہ ہو - 705 00:59:44,630 --> 00:59:48,490 ٹھیک ہے، اگر آپ میٹرکس باتیں کر رہے ہیں یہ غیر معمولی ہونا نہیں ہے، 706 00:59:48,490 --> 00:59:56,730 لیکن آپ C میں شاذ و نادر ہی بہوایامی arrays کا استعمال کرتے ہوئے جا رہے ہیں. 707 00:59:57,630 --> 01:00:00,470 جی ہاں. >> [طالب علم.] چلو کا کہنا ہے کہ آپ کو ایک بہت ہی طویل صف ہے. 708 01:00:00,470 --> 01:00:03,900 >> تو یہ مجازی میموری میں مسلسل سب کو نظر آئے گا، 709 01:00:03,900 --> 01:00:05,640 ، ٹھیک ہے ایک دوسرے کے ساتھ عناصر کی طرح 710 01:00:05,640 --> 01:00:08,770 لیکن یہ جسمانی یاد میں اس کے لئے ممکن تقسیم پر ہو سکتا ہے؟ >> جی ہاں. 711 01:00:08,770 --> 01:00:16,860 مجازی میموری کام یہ ہے کہ یہ صرف جدا - 712 01:00:19,220 --> 01:00:24,860 آونٹن کا یونٹ ایک صفحہ، جس سے 4 کلو بائٹ جاتا ہے، 713 01:00:24,860 --> 01:00:29,680 اور تو جب ایک ایسے عمل کا کہنا ہے کہ، ارے، میں اس میموری کو استعمال کرنے کے لئے کرنا چاہتے ہیں، 714 01:00:29,680 --> 01:00:35,970 آپریٹنگ سسٹم کے لئے 4 کلو بائٹ میموری کی اس چھوٹی سی بلاک مختص کی جا رہی ہے. 715 01:00:35,970 --> 01:00:39,100 یہاں تک کہ اگر آپ صرف میموری کے پورے بلاک میں ایک چھوٹی سی بائٹ استعمال کرتے ہیں، 716 01:00:39,100 --> 01:00:42,850 آپریٹنگ سسٹم مکمل 4 کلو بائٹ دینے جا رہا ہے. 717 01:00:42,850 --> 01:00:49,410 تو ہے کہ اس کا مطلب کیا ہے میں کر سکتے ہیں - چلو کا کہنا ہے کہ یہ میرا اسٹیک ہے. 718 01:00:49,410 --> 01:00:53,180 یہ اسٹیک الگ کیا جا سکتا ہے. میرا اسٹیک میگا بائٹس اور میگا بائٹ ہو سکتی ہے. 719 01:00:53,180 --> 01:00:55,020 میرا اسٹیک بڑا ہو سکتا ہے. 720 01:00:55,020 --> 01:01:00,220 لیکن اسٹیک خود انفرادی صفحات میں تقسیم کیا گیا ہے، 721 01:01:00,220 --> 01:01:09,010 ، اگر ہم یہاں دیکھو کا کہنا ہے کہ یہ ہمارا RAM ہے 722 01:01:09,010 --> 01:01:16,600 اگر میں RAM کی 2 گیگا ہے، یہ میری RAM کے zeroth بائٹ کی طرح اصل ایڈریس 0 ہے، 723 01:01:16,600 --> 01:01:22,210 اور یہ 2 تمام طرح گیگا یہاں ہے. 724 01:01:22,210 --> 01:01:27,230 تو اس بلاک یہ صفحہ یہاں مطابق ہو سکتا ہے. 725 01:01:27,230 --> 01:01:29,400 اس بلاک پر اس صفحے کو یہاں کے مطابق ہو سکتا ہے. 726 01:01:29,400 --> 01:01:31,560 یہ ایک یہ یہاں ایک کے مطابق ہو سکتا ہے. 727 01:01:31,560 --> 01:01:35,540 تو آپریٹنگ سسٹم جسمانی میموری کو تفویض کرنے کے لئے آزاد ہے 728 01:01:35,540 --> 01:01:39,320 کسی بھی انفرادی منمانے صفحے پر. 729 01:01:39,320 --> 01:01:46,180 اور اس کا مطلب یہ ہے کہ اگر یہ سرحد ایک صف straddle ہوتا ہے، 730 01:01:46,180 --> 01:01:50,070 ایک صف کو اس کے بائیں طرف ہوتا ہے اور ایک صفحے کے اس آرڈر کی صحیح، 731 01:01:50,070 --> 01:01:54,460 تو اس صف جسمانی یاد میں تقسیم کیا جا رہا ہے. 732 01:01:54,460 --> 01:01:59,280 اور پھر جب آپ اس پروگرام چھوڑ دیا، جب عمل ختم ہو جاتا ہے، 733 01:01:59,280 --> 01:02:05,690 نے یہ mappings مٹ جاتے ہیں اور پھر اس کے بعد دوسری چیزوں کے لئے ان بلاکس کو استعمال کرنے کے لئے مفت ہے. 734 01:02:14,730 --> 01:02:17,410 مزید سوال؟ 735 01:02:17,410 --> 01:02:19,960 [طالب علم] پوائنٹر ریاضی. >> اوہ، جی ہاں. 736 01:02:19,960 --> 01:02:28,410 سلک آسان تھے، لیکن ints طرح کچھ دیکھ، 737 01:02:28,410 --> 01:02:35,000 تو واپس int X [4]. 738 01:02:35,000 --> 01:02:41,810 ، چاہے یہ ایک صف ہے یا چاہے وہ 4 integers کے malloced صف پوائنٹر ہے 739 01:02:41,810 --> 01:02:47,060 یہ اسی طرح کا علاج کیا جا رہا ہے. 740 01:02:50,590 --> 01:02:53,340 [طالب علم] تو arrays ڈھیر پر ہیں؟ 741 01:03:01,400 --> 01:03:05,270 [Bowden] Arrays ڈھیر پر نہیں ہیں. >> [طالب علم] اوہ. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] صف کی اس قسم اسٹیک پر جاتا 743 01:03:08,320 --> 01:03:12,220 جب تک آپ اس میں اعلان کیا - عالمی متغیر کو نظر انداز. عالمی متغیر کا استعمال نہ کریں. 744 01:03:12,220 --> 01:03:16,280 کے اندر ایک تقریب میں کہتا int X [4]. 745 01:03:16,280 --> 01:03:22,520 یہ اس صف کے لئے اسٹیک پر ایک بلاک 4 عددی پیدا ہو رہا ہے. 746 01:03:22,520 --> 01:03:26,960 لیکن یہ malloc (4 * (int) sizeof)؛ ڈھیر پر جانے کے لئے کی جا رہی ہے. 747 01:03:26,960 --> 01:03:31,870 لیکن بہت اسی طرح سے میں نے اس کے بعد x اور پی کا استعمال کر سکتے ہیں، 748 01:03:31,870 --> 01:03:36,140 مستثنیات میں نے کہا کہ پہلے آپ پی reassign کر سکتے ہیں کے مقابلے میں دوسرے 749 01:03:36,140 --> 01:03:40,960 تکنیکی طور پر، ان کے سائز کو کسی حد تک مختلف ہیں، لیکن اس سے مکمل طور پر غیر متعلقہ ہے. 750 01:03:40,960 --> 01:03:43,310 تم نے ان کے سائز کو اصل میں کبھی نہیں استعمال کریں. 751 01:03:48,020 --> 01:03:56,810 P میں کہہ سکتے P [3] = 2، یا X [3] = 2؛ 752 01:03:56,810 --> 01:03:59,680 تم نے انہیں بالکل اسی طرح سے استعمال کر سکتے ہیں. 753 01:03:59,680 --> 01:04:01,570 تو پوائنٹر اب ریاضی - جی ہاں. 754 01:04:01,570 --> 01:04:07,390 [طالب علم] کیا آپ P * اگر آپ بریکٹ کرنا نہیں ہے؟ 755 01:04:07,390 --> 01:04:11,720 بریکٹ شامل dereference ہیں. ٹھیک ہے. >> 756 01:04:11,720 --> 01:04:20,200 اصل میں، میں بھی آپ کے ساتھ کیا کہہ رہے ہو آپ کو بہوایامی arrays حاصل کر سکتے ہیں 757 01:04:20,200 --> 01:05:02,650 اشارہ کے ساتھ، جو آپ کر سکتے ہیں جیسے کچھ ہے، ہم کا کہنا ہے کہ، int *** PP = malloc (sizeof (int *) * 5)، 758 01:05:02,650 --> 01:05:06,900 میں یہ سب پہلے صرف لکھیں گے. 759 01:05:37,880 --> 01:05:41,020 میں وہ نہیں چاہتے تھے. 760 01:05:41,020 --> 01:05:42,550 ٹھیک ہے. 761 01:05:42,550 --> 01:05:48,910 میں یہاں کیا کیا ہے - PP [میں] ہونا چاہئے. 762 01:05:48,910 --> 01:05:53,680 تو پی پی ایک پوائنٹر میں ایک پوائنٹر ہے. 763 01:05:53,680 --> 01:06:02,420 تم پی پی mallocing 5 int ستاروں کی ایک صف کی طرف اشارہ کر رہے ہیں. 764 01:06:02,420 --> 01:06:10,950 تو آپ کی یاد میں اسٹیک pp. ہے 765 01:06:10,950 --> 01:06:20,150 5 بلاکس ہیں جو سب خود اشارہ کی ایک صف کی طرف اشارہ ہو رہا ہے. 766 01:06:20,150 --> 01:06:28,210 اور پھر جب میں یہاں malloc، میں malloc کہ میں سے ہر ایک ان انفرادی اشارہ 767 01:06:28,210 --> 01:06:32,080 ڈھیر 4 بائٹس کی ایک علیحدہ بلاک کی طرف اشارہ کرنا چاہئے. 768 01:06:32,080 --> 01:06:35,870 تو 4 بائٹس اس پوائنٹس. 769 01:06:37,940 --> 01:06:40,660 اور ایک مختلف 4 بائٹس کو ایک پوائنٹس. 770 01:06:40,660 --> 01:06:43,200 >> اور ان میں سے سب ان کے اپنے 4 بائٹس کی طرف اشارہ ہے. 771 01:06:43,200 --> 01:06:49,080 اس سے کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے بہوایامی چیزوں کو کرنے کے ایک طریقہ فراہم کرتا ہے. 772 01:06:49,080 --> 01:06:58,030 میں PP [3] [4]، لیکن اب یہ ایک ہی بات نہیں ہے بہوایامی arrays کہہ سکتے 773 01:06:58,030 --> 01:07:05,390 کیونکہ بہوایامی arrays [3] [4]. X صف میں آفسیٹ واحد میں ترجمہ 774 01:07:05,390 --> 01:07:14,790 یہ dereferences P، تیسری انڈیکس تک رسائی حاصل کرتا ہے، تو dereferences کہ 775 01:07:14,790 --> 01:07:20,790 اور رسائی - 4 باطل ہو گا - دوسری انڈیکس. 776 01:07:24,770 --> 01:07:31,430 جبکہ جب ہم نے int X [3] [4] اس سے پہلے کے طور پر ایک کثیرالابعاد سرنی 777 01:07:31,430 --> 01:07:35,740 اور جب تم بریکٹ دوگنا یہ واقعی صرف ایک dereference ہے، 778 01:07:35,740 --> 01:07:40,490 آپ کو ایک پوائنٹر کی پیروی کر رہے ہیں تو اور آفسیٹ 779 01:07:40,490 --> 01:07:42,850 یہ واقعی 2D ریفرنسز ہے. 780 01:07:42,850 --> 01:07:45,840 آپ کے پاس 2 الگ الگ اشارہ پر عمل کریں. 781 01:07:45,840 --> 01:07:50,420 تو یہ بھی تکنیکی طور پر کی اجازت دیتا ہے آپ کو بہوایامی arrays پر 782 01:07:50,420 --> 01:07:53,550 ہر انفرادی صف مختلف سائز کہاں ہے. 783 01:07:53,550 --> 01:07:58,000 تو مجھے لگتا ہے کہ کنگری دار بہوایامی arrays ہے جو یہ کہتے ہیں 784 01:07:58,000 --> 01:08:01,870 واقعی پہلی بات کچھ 10 عناصر ہیں کی طرف اشارہ کر سکتے ہیں کے بعد، 785 01:08:01,870 --> 01:08:05,540 دوسری بات کچھ 100 عناصر ہیں کی طرف اشارہ کر سکتے ہیں. 786 01:08:05,540 --> 01:08:10,790 [طالب علم] اشارہ آپ کر سکتے ہیں کی تعداد پر کوئی حد ہے 787 01:08:10,790 --> 01:08:14,290 دیگر اشارہ کی طرف اشارہ کرتے ہوئے؟ >> نمبر 788 01:08:14,290 --> 01:08:17,010 آپ int ***** پی کر سکتے ہیں. 789 01:08:18,050 --> 01:08:23,760 پوائنٹر ریاضی پر واپس جائیں - >> [طالب علم] اوہ. >> جی ہاں. 790 01:08:23,760 --> 01:08:35,649 [طالب علم]، اگر میں int پی *** ہے اور اس کے بعد میں نے ایک محولہ لقب ضبطی کرتے ہیں اور میں کا کہنا ہے کہ P * اس کی قیمت کے برابر ہے 791 01:08:35,649 --> 01:08:39,560 یہ صرف محولہ لقب ضبطی 1 درجہ کیا کرنے جا رہے ہیں؟ >> جی ہاں. 792 01:08:39,560 --> 01:08:43,340 تو اگر میں بات یہ ہے کہ گزشتہ پوائنٹر طرف اشارہ ہے تک رسائی حاصل کرنا چاہتے ہیں - 793 01:08:43,340 --> 01:08:46,210 تو پھر تم *** P کرتے ہیں. ٹھیک ہے. >> 794 01:08:46,210 --> 01:08:54,080 تو یہ 1 بلاک، کسی دوسرے بلاک پر پوائنٹس، دوسرے بلاک پر پوائنٹس P پوائنٹس ہے. 795 01:08:54,080 --> 01:09:02,010 پھر اگر تم * کیا P = کچھ، تو آپ اس کو تبدیل کر رہے ہیں 796 01:09:02,010 --> 01:09:13,640 اب ایک مختلف بلاک کی طرف اشارہ ہے. ٹھیک ہے. >> 797 01:09:13,640 --> 01:09:17,649 >> [Bowden] اور اگر ان malloced رہے تھے، تو آپ اب میموری لیک ہے 798 01:09:17,649 --> 01:09:20,430 جب تک کہ آپ ان میں سے مختلف حوالوں ہو 799 01:09:20,430 --> 01:09:25,270 کے بعد آپ کو واپس وہ لوگ ہیں یہ نہیں ہے کہ تم صرف پھینک دیا کر سکتے ہیں. 800 01:09:25,270 --> 01:09:29,550 پوائنٹر ریاضی. 801 01:09:29,550 --> 01:09:36,310 int X [4]، 4 integers کے ایک صف مختص کی جا رہی ہے 802 01:09:36,310 --> 01:09:40,670 جہاں X صف کے آغاز کی طرف اشارہ کرنے جا رہا ہے. 803 01:09:40,670 --> 01:09:50,420 تو جب میں X [1] ایسا کچھ کا کہنا ہے کہ،، میں اس صف میں دوسری عددی مطلب چاہتے ہیں 804 01:09:50,420 --> 01:09:53,319 جو اس سے ہو جائے گا. 805 01:09:53,319 --> 01:10:04,190 لیکن سچ میں، جو صف میں 4 بائٹس ہے کیونکہ اس عددی 4 بائٹس لیتا ہے. 806 01:10:04,190 --> 01:10:08,470 تو 1 آفسیٹ کا کیا مطلب ہوتا ہے 1 آفسیٹ 807 01:10:08,470 --> 01:10:12,030 اوقات جو صف کی قسم ہے فونز. 808 01:10:12,030 --> 01:10:17,170 یہ integers کے ایک صف ہے، تو اس int 1 بار سائز کرنا جانتا ہے جب آفسیٹ چاہتا ہے. 809 01:10:17,170 --> 01:10:25,260 دوسری نحو. یاد رکھیں کہ یہ * (X + 1) کے برابر ہے. 810 01:10:25,260 --> 01:10:35,250 میں پوائنٹر جب + 1، جو کہ واپسی پتہ کہ پوائنٹر ذخیرہ کرنے ہے کا کہنا ہے کہ 811 01:10:35,250 --> 01:10:40,360 علاوہ 1 بار پوائنٹر کی قسم کا سائز ہے. 812 01:10:40,360 --> 01:10:59,510 X ox100 =، تو اگر تو X 1 + ox104 = 813 01:10:59,510 --> 01:11:19,750 اور تم نے اس کا غلط استعمال کر سکتے ہیں اور کچھ کا کہنا ہے کہ کر سکتے ہیں * چار طرح C = (چار) * X؛ 814 01:11:19,750 --> 01:11:23,050 اور اب سی ایکس کے طور پر ایک ہی ایڈریس پر جا رہا ہے. 815 01:11:23,050 --> 01:11:26,040 ج ox100 برابر کی جا رہی ہے، 816 01:11:26,040 --> 01:11:31,490 لیکن C 1 + ox101 کے برابر ہو جا رہا ہے 817 01:11:31,490 --> 01:11:38,030 چونکہ پوائنٹر ریاضی پوائنٹر کی قسم ہے کہ آپ کا اضافہ کر رہے ہیں پر منحصر ہے. 818 01:11:38,030 --> 01:11:45,390 تو ج 1 +، سی میں دکھائی دیتی ہے، یہ ایک چار پوائنٹر ہے، تو اس چار 1 بار سائز کو شامل کرنے جا رہا ہے، 819 01:11:45,390 --> 01:11:48,110 جو ہمیشہ 1 جا رہی ہے، تو آپ 101 حاصل 820 01:11:48,110 --> 01:11:54,890 جبکہ اگر میں ایکس، جو بھی ہے اب بھی 100، X 1 + 104 جا رہا ہے. 821 01:11:56,660 --> 01:12:06,340 [طالب علم] نے آپ C + + میں 1 کی طرف سے آپ پوائنٹر کو ترقی کے لئے استعمال کر سکتا ہوں؟ 822 01:12:06,340 --> 01:12:09,810 جی ہاں، آپ یہ کر سکتے ہیں. 823 01:12:09,810 --> 01:12:16,180 یہ آپ کو ایکس کے ساتھ ایسا نہیں کر سکتے ہیں کیونکہ X صرف ایک علامت ہے، مسلسل جاری ہے، آپ X تبدیل نہیں کر سکتے. 824 01:12:16,180 --> 01:12:22,610 >> لیکن سی صرف ایک پوائنٹر ہوتا ہے، تو C + + بالکل صحيح ہے، اور 1 کی طرف سے اضافہ کریں گے. 825 01:12:22,610 --> 01:12:32,440 اگر سی نے صرف ایک int * تھے، تو C + 104 + جائے گا. 826 01:12:32,440 --> 01:12:41,250 + + کرتا پوائنٹر ریاضی C + 1 پوائنٹر ریاضی کیا ہوتا ہے. 827 01:12:43,000 --> 01:12:48,870 یہ اصل کس طرح ضم طرح کی طرح چیزوں کی ایک بہت ہے - 828 01:12:49,670 --> 01:12:55,710 چیزوں کی کاپیاں بنانے کے بجائے، آپ کو اس کی بجائے منتقل کر سکتی ہیں - 829 01:12:55,710 --> 01:13:02,400 کی طرح ہے اس میں سے کچھ مٹانے کے دو - اگر میں صف کے اس نصف کو منتقل کرنے کی چاہتے تھے. 830 01:13:04,770 --> 01:13:10,520 چلو کا کہنا ہے کہ میں ایک تقریب میں صف کے اس طرف منتقل کرنا چاہتے تھے. 831 01:13:10,520 --> 01:13:12,700 کیا میں اس تقریب کو منتقل کریں گے؟ 832 01:13:12,700 --> 01:13:17,050 اگر میں X گزر، مجھے یہ پتہ گزر رہا ہوں. 833 01:13:17,050 --> 01:13:23,780 لیکن میں اس مخصوص ایڈریس کو منتقل کرنے کی چاہتے ہیں. تو مجھے کیا گزر چاہئے؟ 834 01:13:23,780 --> 01:13:26,590 [طالب علم] پوئینٹراس 2 +؟ 835 01:13:26,590 --> 01:13:29,350 [Bowden] تو X 2 +. جی ہاں. 836 01:13:29,350 --> 01:13:31,620 اس ایڈریس پر جا رہا ہے. 837 01:13:31,620 --> 01:13:42,810 تم نے بہت بار بار بھی اس کے طور پر نظر آئے گا، X [2] اور اس کے بعد اس کا پتہ ہے. 838 01:13:42,810 --> 01:13:47,850 تو آپ کو اس کا پتہ کیونکہ بریکٹ میں ایک انترنہیت dereference ہے لینے کی ضرورت ہے. 839 01:13:47,850 --> 01:13:53,250 X [2] سے مراد قدر ہے کہ اس کی ٹوکری میں ہے، اور پھر آپ کو اس باکس کا پتہ چاہتے ہیں، 840 01:13:53,250 --> 01:13:56,850 تاکہ آپ کا کہنا ہے کہ & X [2]. 841 01:13:56,850 --> 01:14:02,880 تو کہ ضم طرح میں کس طرح کچھ ہے جہاں آپ کو کچھ نصف فہرست کو منتقل کرنا چاہتے ہیں 842 01:14:02,880 --> 01:14:08,790 آپ واقعی گزر & X [2]، اور، جہاں تک پنراورتی کال کا تعلق ہے، 843 01:14:08,790 --> 01:14:12,510 میری نئی صف وہاں سے شروع ہوتا ہے. 844 01:14:12,510 --> 01:14:15,130 آخری منٹ سوالات. 845 01:14:15,130 --> 01:14:20,050 [طالب علم] اگر ہم ایک ایمپرسینڈ نہیں ڈال یا ایک - اس کا کیا کہا جاتا ہے؟ >> سٹار؟ 846 01:14:20,050 --> 01:14:23,200 [طالب علم] سٹار. >> تکنیکی طور پر، dereference آپریٹر، لیکن - >> [طالب علم] Dereference. 847 01:14:23,200 --> 01:14:29,310 >> اگر ہم ایک ستارہ یا ایک ایمپرسینڈ نہیں کرتے، اگر میں صرف Y کا کہنا ہے کہ کیا ہوتا ہے = x اور X؟ پوائنٹر ہے. 848 01:14:29,310 --> 01:14:34,620 Y کی قسم کیا ہے؟ >> [طالب علم] میں یہ 2 پوائنٹر کہیں گے. 849 01:14:34,620 --> 01:14:38,270 تو اگر آپ نے ابھی کا کہنا ہے کہ Y = X، اب X اور Y کے نقطہ ایک ہی بات ہے. >> ایک ہی چیز [طالب علم کو] پوائنٹ. 850 01:14:38,270 --> 01:14:45,180 اور اگر ایکس ایک int پوائنٹر ہے؟ >> یہ شکایت کی وجہ سے آپ کو اشارہ تفویض نہیں کر سکتے. 851 01:14:45,180 --> 01:14:46,540 [طالب علم] ٹھیک ہے. 852 01:14:46,540 --> 01:14:51,860 ، کہ اشارہ یاد رکھیں، اگرچہ ہم ان کے تیر کے طور پر اپنی طرف متوجہ 853 01:14:51,860 --> 01:15:02,010 واقعی وہ سٹور - int * X - واقعی میں تمام ایکس ذخیرہ کرنے ہے ox100 طرح کچھ ہے، 854 01:15:02,010 --> 01:15:06,490 جو ہم نے 100 میں محفوظ بلاک کی طرف اشارہ کرتے ہوئے کے طور پر کی نمائندگی کرنے ہو. 855 01:15:06,490 --> 01:15:19,660 تو جب میں کہتا ہوں کہ int * Y = X، میں صرف Y میں ox100 رہا ہوں کاپی 856 01:15:19,660 --> 01:15:24,630 جو ہم صرف Y کے طور پر کی نمائندگی کرنے جا رہے ہیں، بھی ox100 کی طرف اشارہ کرتے ہوئے. 857 01:15:24,630 --> 01:15:39,810 اور اگر میں کہتا ہوں int میں = (int) X، تو میں ذخیرہ جو ox100 کی قدر ہے جا رہا ہے 858 01:15:39,810 --> 01:15:45,100 کے اندر اندر اس کی، لیکن اب یہ ایک پوائنٹر کے بجائے ایک عددی کے طور پر تشریح کی جائے جا رہا ہے. 859 01:15:45,100 --> 01:15:49,310 لیکن آپ کو کاسٹ کی ضرورت ہے یا یہ اور شکایت جائے گا. 860 01:15:49,310 --> 01:15:53,300 [طالب علم] تو آپ پر ڈال مطلب ہے - 861 01:15:53,300 --> 01:16:00,290 کیا یہ Y X یا کاسٹنگ int int ڈال رکھا جائے جا رہے ہیں؟ 862 01:16:00,290 --> 01:16:03,700 [Bowden] کیا خیال ہے؟ 863 01:16:03,700 --> 01:16:07,690 [طالب علم] ٹھیک ہے. ان قوسین کے بعد وہاں ایک ایکس یا سوال ہو رہا ہے؟ 864 01:16:07,690 --> 01:16:11,500 >> [Bowden] یا تو. X اور Y کے برابر ہیں. >> [طالب علم] ٹھیک ہے. 865 01:16:11,500 --> 01:16:14,390 کیونکہ وہ دونوں اشارہ ہیں. >> جی ہاں. 866 01:16:14,390 --> 01:16:21,050 [طالب علم] تو اس عددی شکل میں شش اعشاری 100 جمع کریں گے؟ >> [Bowden] جی ہاں. 867 01:16:21,050 --> 01:16:23,620 لیکن وہ ہے جو اس کی طرف اشارہ کی قیمت نہیں. 868 01:16:23,620 --> 01:16:29,940 [Bowden] جی ہاں. >> [طالب علم] تو صرف عددی شکل میں پتہ ہے. ٹھیک ہے. 869 01:16:29,940 --> 01:16:34,720 [Bowden] اگر آپ کچھ عجیب وجہ سے چاہتے تھے، 870 01:16:34,720 --> 01:16:38,900 آپ کو اشارہ کے ساتھ خصوصی طور پر اور کبھی نہیں integers کے ساتھ نمٹنے کے نمٹنے کر سکتے ہیں 871 01:16:38,900 --> 01:16:49,240 اور صرف int * X = 0 طرح. 872 01:16:49,240 --> 01:16:53,000 تو پھر تم سچ میں ایک بار پوائنٹر ریاضی شروع ہو رہا الجھن ہونے جا رہے ہیں. 873 01:16:53,000 --> 01:16:56,570 تو تعداد کہ وہ ذخیرہ معنی ہیں. 874 01:16:56,570 --> 01:16:58,940 ایسا لگتا ہے کہ آپ کس طرح ان کی تشریح ختم. 875 01:16:58,940 --> 01:17:02,920 تو میں ایک int * سے ox100 int کی کاپی کے لئے آزاد ہوں، 876 01:17:02,920 --> 01:17:07,790 شاید نہیں ڈال کرنے کے لئے پر چللایا ہونے والی you're - اور میں تفویض کرنے کے لئے آزاد ہوں - 877 01:17:07,790 --> 01:17:18,160 میں (int *) اس صوابدیدی int * میں ox1234 طرح کچھ تفویض آزاد ہوں. 878 01:17:18,160 --> 01:17:25,480 تو ox123 ہے بالکل اسی طرح جیسے ایک درست میموری ایڈریس کے طور پر Y &. 879 01:17:25,480 --> 01:17:32,060 اور عمومی Y کچھ جو بہت ox123 ہے واپس کرنے کے ہوتا ہے. 880 01:17:32,060 --> 01:17:35,430 [طالب علم] ایک واقعی ڈاؤن لوڈ، اتارنا شش اعشاری سے دشملو فارم جانے کے لئے اس طرح سے کیا جائے گا، 881 01:17:35,430 --> 01:17:39,230 اگر آپ کو ایک پوائنٹر ہے اور تم نے اسے ایک int کے طور پر ڈالا؟ 882 01:17:39,230 --> 01:17:44,860 [Bowden] آپ printf کی طرح استعمال کرتے ہوئے واقعی میں پرنٹ کر سکتے ہیں. 883 01:17:44,860 --> 01:17:50,300 چلو کا کہنا ہے کہ میں int Y = 100 ہے. 884 01:17:50,300 --> 01:18:02,700 تو printf٪ (D \ N - جیسا کہ آپ کے پاس پہلے سے ہی پتہ ہونا چاہیئے - پرنٹ ہے کہ کے طور پر عددی،٪ X. 885 01:18:02,700 --> 01:18:05,190 ہم اس شش اعشاری کے طور پر پرنٹ کریں گے. 886 01:18:05,190 --> 01:18:10,760 تو پوائنٹر شش اعشاری کے طور پر محفوظ نہیں ہے، 887 01:18:10,760 --> 01:18:12,960 اور ایک عددی دشملو کے طور پر محفوظ نہیں ہے. 888 01:18:12,960 --> 01:18:14,700 سب کچھ بائنری کے طور پر محفوظ کیا جاتا ہے. 889 01:18:14,700 --> 01:18:17,950 یہ صرف ہے کہ ہم شش اعشاری کے طور پر اشارہ کو ظاہر کرنے کے لئے کرتے ہیں 890 01:18:17,950 --> 01:18:23,260 کیونکہ ہم ان 4 بائٹ بلاکس میں چیزوں کے بارے میں سوچتے ہیں، 891 01:18:23,260 --> 01:18:25,390 اور میموری پتوں واقف ہیں. 892 01:18:25,390 --> 01:18:28,890 ہم جیسے، اگر یہ BF کے ساتھ شروع ہوتا ہے، پھر اس کے بعد اسٹیک پر ہوتا ہے. 893 01:18:28,890 --> 01:18:35,560 تو یہ صرف شش اعشاری کے طور پر اشارہ کی ہماری تشریح ہے. 894 01:18:35,560 --> 01:18:39,200 ٹھیک ہے. کوئی آخری سوال؟ 895 01:18:39,200 --> 01:18:41,700 >> میں تھوڑی دیر کے لئے یہاں کے بعد اگر آپ کو کچھ اور کرنا پڑے گا. 896 01:18:41,700 --> 01:18:46,070 اور یہ کہ اس کے آخر ہے. 897 01:18:46,070 --> 01:18:48,360 >> [طالب علم] Yay! [تعریف] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]