1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [অনুচ্ছেদ 4 - আরো আরামদায়ক] 2 00:00:02,520 --> 00:00:04,850 [Rob 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 >> আমি একটা পয়েন্টার পি ডিক্লেয়ার করতে চান. কি টাইপ কেমন হয়েছে? 22 00:01:26,210 --> 00:01:33,530 [ছাত্রদের] int-* পি. >> হ্যাঁ. সুতরাং int-* পি. 23 00:01:33,530 --> 00:01:38,030 এবং কিভাবে আমি এটা x নির্দেশ করে? >> [ছাত্রদের] Ampersand. 24 00:01:40,540 --> 00:01:45,300 [Bowden] সুতরাং আক্ষরিক ampersand বলা হয় অপারেটর এর ঠিকানা. 25 00:01:45,300 --> 00:01:50,460 সুতরাং যখন আমি বলতে & x এটি পরিবর্তনশীল x মেমরির ঠিকানা হচ্ছে. 26 00:01:50,460 --> 00:01:56,790 তাই এখন আমি পয়েন্টার পি আছে, এবং আমার কোথাও কোড আমি * পি ব্যবহার করতে পারেন 27 00:01:56,790 --> 00:02:02,960 অথবা আমি এক্স ব্যবহার এবং এটি সঠিক একই জিনিস হতে থাকবে. 28 00:02:02,960 --> 00:02:09,520 (* পি). এই কি করছেন? কি যে তারা কি বোঝাতে চেয়েছেন? 29 00:02:09,520 --> 00:02:13,120 [ছাত্রদের] এটি যে বিন্দুতে একটি মান মানে. >> হ্যাঁ. 30 00:02:13,120 --> 00:02:17,590 সুতরাং আমরা যদি এটা তাকান, এটা চিত্র আঁকা আউট খুব উপযোগী হতে পারে 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 এর একটি তীর আঁকা. 34 00:02:31,590 --> 00:02:40,270 সুতরাং যখন আমরা বলতে * পি বাক্স আমরা যে পি যেতে বলছে. 35 00:02:40,270 --> 00:02:46,480 রাশি তীর অনুসরণ করা হয় এবং তারপর যাই হোক না কেন না আপনি যে বক্স সঙ্গে চান অধিকার আছে. 36 00:02:46,480 --> 00:03:01,090 তাই আমি * পি = 7 বলতে পারে; এবং যে যে বাক্সে হল x 7 এবং যে পরিবর্তন হবে. 37 00:03:01,090 --> 00:03:13,540 অথবা আমি বলতে পারে int-z '= * পি * 2; যে বিভ্রান্তিকর এর কারণ এটি এর তারকা, তারকা. 38 00:03:13,540 --> 00:03:19,230 এক তারকা পি dereferencing হয়, অন্যান্য তারকা 2 দ্বারা গুন করা হয়. 39 00:03:19,230 --> 00:03:26,780 উল্লেখ্য, আমি ভাল x এর সঙ্গে * পি প্রতিস্থাপিত হতে পারে. 40 00:03:26,780 --> 00:03:29,430 আপনি একই ভাবে তাদের ব্যবহার করতে পারেন. 41 00:03:29,430 --> 00:03:38,000 এবং তারপর পরে আমি পি বিন্দু একটি সম্পূর্ণ নতুন জিনিস থাকতে পারেন. 42 00:03:38,000 --> 00:03:42,190 আমি শুধু বলতে পারেন পি = &z; 43 00:03:42,190 --> 00:03:44,940 সুতরাং এখন কোন x যাও আর পয়েন্ট P; এটি z-স্থানটিকে. 44 00:03:44,940 --> 00:03:50,510 এবং যে কোন সময় আমি * পি এটা 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 এবং তারপর আপনি এটি করছেন dereferencing 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 যে একটি পয়েন্টার নেয় এবং ঠিক আছে = 6 * পি; 51 00:04:32,810 --> 00:04:39,990 ভালো লেগেছে আমরা swap 'র সঙ্গে আগে দেখেছি, আপনি একটি কার্যকর করতে swap এবং একটি পৃথক ফাংশন ব্যবহার করতে পারবেন না 52 00:04:39,990 --> 00:04:45,180 দ্বারা শুধুমাত্র পূর্ণসংখ্যা ক্ষণস্থায়ী কারণ সি সবকিছু সবসময় মান দ্বারা হয় ক্ষণস্থায়ী. 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 সুতরাং যখন আমি বলতে foo বিন্যাস (পি); আমি ফাংশন মধ্যে foo বিন্যাস করছি পয়েন্টার ক্ষণস্থায়ী 56 00:05:00,770 --> 00:05:03,910 এবং তারপর foo বিন্যাস করছেন * পি = 6 হয়; 57 00:05:03,910 --> 00:05:08,600 তাই ভিতর যে ফাংশন, * পি এখনও সমতুল্য x যাও, 58 00:05:08,600 --> 00:05:12,720 কিন্তু আমি যে ফাংশন ভিতরে এক্স ব্যবহার করে না, কারণ এটা যে ফাংশানের মধ্যে scoped না পারেন. 59 00:05:12,720 --> 00:05:19,510 সুতরাং * পি = 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 [Bowden] মধ্যে int-y = 3 ভালো কিছু হিসাবে একটি পয়েন্টার ফেরত; রিটার্ন & 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 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 এবং বার recursive এবং এটি নিজেই কল করতে পারেনি পারে, 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 (sizeof (int-))? 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 কিন্তু এর যাক বলতে আমরা কিছু অন্যান্য ফাংশন, baz কল ঘটেছে. 134 00:11:24,220 --> 00:11:28,990 Baz এখানে তার নিজস্ব স্ট্যাকের ফ্রেম পাওয়া যাচ্ছে. 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 এটা ঠিক আছে, কারণ আপনি পরিবর্তিত ফাংশন baz আহ্বান করে যাচ্ছে. 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 কিন্তু আপনি যে নির্ভর করতে পারে না. সি শুধু অনির্দিষ্ট আচরণ বলছেন. 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 x বলে, int x এর জন্য মেমরি বরাদ্দ করা হয়. 177 00:14:46,910 --> 00:14:51,630 যখন এক্স সুযোগ গুটিয়ে ফেলে, 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 চলুন শুরু করা যাক বলতে আপনি কেবলমাত্র 4 গিগাবাইট RAM-র সাথে একটি কম্পিউটার আছে. 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 অ্যানালজিস কঠিন. 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 এবং যে এর dereferencing মেমরি ঠিকানা 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 কোথাও থেকে ox0 যাও ঋষভ 8 f's - ffffffff. 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 সুতরাং যাচ্ছে যাও 8 4 বাইট জন্য হেক্সাডেসিমাল সংখ্যা আছে এর. 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 যোগাড় করে দেয়. 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 শুধু ম্যাপিং যে এটি এই ঠিকানাগুলি জন্য রয়েছে, এবং যে এটা মুছে যাবে. 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 সি মান - 303 00:24:52,960 --> 00:24:54,950 আমি সম্ভবত না গিয়ে গড়বড় আপ. 304 00:24:54,950 --> 00:24:58,800 সি মান ঠিক পছন্দ হয় কি হয় সি, সি সরকারী নথিপত্রে 305 00:24:58,800 --> 00:25:00,340 এটি কি তা বলেছেন. 306 00:25:00,340 --> 00:25:08,650 তাই শুধু সি মান বলছেন যে একটি গৃহস্থালি এবং চিরকালের জন্য সবসময় 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 তাই শুধু সি আদর্শ সংজ্ঞায়িত হয় সব কিছু আপেক্ষিক ক্রমানুসার. 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 লং longs প্রায় সবসময় যাও 8 বাইট হতে যাচ্ছে. 318 00:26:17,990 --> 00:26:23,160 এবং longs, এটি কিনা তা আপনি একটি 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 লং longs প্রায় সবসময় 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 আমি সঠিক বিট allotments ভুলবেন না. 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 [ছাত্রদের] এবং একটা ডবল? অতিরিক্ত দীর্ঘ float মত হল যে? >> হ্যাঁ. 350 00:29:01,100 --> 00:29:07,940 এটা এখন আপনি পরিবর্তে 4 বাইটের 8 বাইট ব্যবহার করছেন ছাড়া একটি float হিসাবে একই জিনিস. 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 আমি মনে করি - >> দীর্ঘ longs লেগেছে [ছাত্রদের]? >> হ্যাঁ. আমি ঠিক তা মনে করি না. হ্যাঁ. 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 . [ছাত্রদের] কোন গ ফাইল উপস্থিত থাকা আবশ্যক - [একযোগে উভয় জানা - অপাচ্য] 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 বাইনারি ফাইল মধ্যে একটি এক্সিকিউটেবল সম্মিলন. 380 00:31:05,960 --> 00:31:11,400 সুতরাং একজন. গ ফাইলটি একটি প্রধান ফাংশন এ সব আছে করার দরকার নেই. 381 00:31:11,400 --> 00:31:19,220 এবং বড় কোড ঘাঁটি আপনাকে. গ ফাইল এবং 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 তারা যে একটি এক্সিকিউটেবল পুরা করছি একসাথে. 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 এবং তারপর একসাথে সবকিছু পুনরায় লিঙ্ক. 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 আপনি একটি ফাইল করা যাতে যখন আপনি এটা অন্য ডিরেক্টরিতে সিডি এর জন্য টাইপ করুন. লিখতে পারেন 407 00:33:09,150 --> 00:33:15,560 আমি হতাশ ছিল হচ্ছে কারণ আমি বন্ধনরজ্জু সবকিছু আমার অ্যাপ্লায়েন্স ভেতরে 408 00:33:15,560 --> 00:33:21,740 এবং তারপর আমি ম্যাক থেকে পিডিএফ দেখতে. 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 যে LaTeX দ্বারা কম্পাইল করা হয়. 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 কিভাবে আপনি করতে এই পিডিএফ LaTeX. 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 এই ফাইলটি আপনি পিডিএফ LaTeX দিয়ে কম্পাইল করতে চান চলুন. 422 00:34:25,020 --> 00:34:27,889 এবং তাই পিডিএফ LaTeX যে কম্পাইল এর করছেন. 423 00:34:27,889 --> 00:34:31,880 কম্পাইল করা না হয়. এটা ঠিক এর ক্রম আমি উল্লিখিত এই কমান্ড নির্বাহনের অনুমতি. 424 00:34:31,880 --> 00:34:36,110 সুতরাং পিডিএফ LaTeX রান, সেটি ডিরেক্টরিতে আমি চাই এটি কপি করা যাও যাও যাও এটি কপি করা, 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 অন্য প্রশ্ন? অতীত থেকে কিছু ক্যুইজ? কোন পয়েন্টার জিনিষ? 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-)), এক্স এখনও স্ট্যাকের উপর একটি পরিবর্তনশীল, 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 নং কি এক্স স্থানটিকে গাদা হয়. 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 অবগত থাকার সুতরাং, এই বক্স এবং তীর ডায়াগ্রামে হয় ব্যঙ্গ জন্য সাধারণ প্রশংসনীয়. 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 এটা অন্তর্ভুক্ত করা # জিনিস যেমন দেখায় এবং # define, 459 00:37:49,250 --> 00:37:53,800 এবং এটি শুধু কপি এবং pastes কি আসলে যারা মানে. 460 00:37:53,800 --> 00:37:59,240 তাই যখন আপনি # cs50.h অন্তর্ভুক্ত, preprocessor এবং অনুলিপি cs50.h পেস্ট করা হয় 461 00:37:59,240 --> 00:38:01,030 মধ্যে যে লাইন. 462 00:38:01,030 --> 00:38:06,640 আপনি যখন বলতে # x 4 সংজ্ঞায়িত করা, preprocessor সমগ্র প্রোগ্রামের মাধ্যমে যায় 463 00:38:06,640 --> 00:38:10,400 এবং 4 x এর সঙ্গে সমস্ত উদাহরণ প্রতিস্থাপন. 464 00:38:10,400 --> 00:38:17,530 সুতরাং preprocessor একটি বৈধ সি ফাইল লাগে এবং একটি বৈধ সি ফাইল আউটপুট 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 [ছাত্রদের] এটা থেকে সি বাইনারি যায়. 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 এই সভার পূর্বে যায় এটি সি কোড যাও সব নিয়ে যায়, 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 প্রথম এটি সি যাও পাইথন কম্পাইল করে যাচ্ছে, তারপর যাও সভার সি কম্পাইল করে যাচ্ছে, 476 00:38:58,140 --> 00:39:01,600 এবং তারপর সভার বাইনারি অনুবাদ পাওয়া যাচ্ছে. 477 00:39:01,600 --> 00:39:07,800 তাই কম্পাইল থেকে সি বিধানসভা এটা আনতে যাচ্ছে. 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 ফাংশন এবং এগুলির নমুনা জিনিস ভালো স্টাফ শুধু জন্য আপনাকে সতর্কতা অবলম্বন করা আবশ্যক যাও. 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 কোন একটি ফাইল. ণ দীর্ঘ ফাইল হিসাবে এটি একটি বৈধ সি ফাইল হিসাবে কম্পাইল করা যাবে না. 506 00:41:27,640 --> 00:41:30,300 এটি. ণ ডাউন করে কম্পাইল করা যাবে. 507 00:41:30,300 --> 00:41:43,030 এখন, লিঙ্ক কি আসলে একটি গুচ্ছ এনেছে. ণ ফাইল এবং একটি এক্সিকিউটেবল তাদের এনেছে. 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 এবং একটি এক্সিকিউটেবল যে সমস্ত কর্ম এটি প্রয়োজন আছে সঙ্গে আসে আউট. 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. গ ফাইল এবং তারপর পুনরায় লিঙ্ক অন্যথায় সবকিছু 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 আপনি কি এটা বড় হে মোটামুটিভাবে, বলতে সক্ষম হওয়া উচিত. বা ভাল, বড় হে রুক্ষ হয়. 533 00:44:09,410 --> 00:44:15,300 তাই আপনি যদি জিনিষ একই সংখ্যার উপর looping loops নেস্টেড জন্য দেখুন, 534 00:44:15,300 --> 00:44:22,260 ভালো int তোমার, তোমার > [ছাত্রদের] n ছক. >> এটা n ছক হতে থাকে. 535 00:44:22,260 --> 00:44:25,280 যদি আপনি ট্রিপল নেস্টেড আছে, তা n ঘনাংকিত হতে থাকে. 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 এটি সহজ বুঝতে কেন তারা যারা n বর্গ এবং n log n এবং যে সকল 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 আপনি শুধু বলতে পারেন এই এই এবং এই করছে. এই ছক n হল. 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 অ্যারের মধ্যে প্রতিটি উপাদান জন্য, যা কিছু যে স্কয়ার্ড n এর হবে. 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 "হে (লগ ঢ) সময়! মধ্যে সংখ্যা n" 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 তাই যাও n হে কম সময়ে এটা অসম্ভব. 559 00:46:27,430 --> 00:46:30,340 [ছাত্রদের] আপনি দেখিয়েছেন n হে হচ্ছে তা সক্ষম যে উদাহরণ আমাদের 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 হাঁ. এই প্রকারের হয় যে বড় ধরনের হে n এ জিনিষ উদ্যাপন করা যাবে. 565 00:47:13,000 --> 00:47:18,430 কিন্তু সীমাবদ্ধতা আছে, যেমন শুধুমাত্র আপনি ব্যবহার পূর্ণসংখ্যার একটি নির্দিষ্ট সংখ্যক যাও আপ করতে পারেন. 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 [ছাত্রদের] যদি আপনি একটি recursive ফাংশন আছে এবং এটি মাত্র recursive কল করে 571 00:47:58,870 --> 00:48:02,230 একটি ফিরতি বিবৃতি মধ্যে, যে লেঙ্গুড় recursive, 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 লেঙ্গুড় recursive বেশ ভাল. 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 এই হল, কিন্তু একটি নিখুঁত recursive ফাংশন না ফিরতি বার (এক্স - 1). 580 00:48:52,310 --> 00:48:57,620 তাই স্বাভাবিকভাবেই, এই দ্বিধান্বিত. আপনি বেস ক্ষেত্রে এবং পণ্যদ্রব্য প্রয়োজন. 581 00:48:57,620 --> 00:49:00,360 কিন্তু এখানে ধারণা হয় যে এই লেঙ্গুড় recursive, 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 যে যুক্তি x এর অনুরূপ. 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 যদি কম্পাইলার স্বীকার করে যে এই একটি লেঙ্গুড় recursive ফাংশন, 588 00:49:35,660 --> 00:49:38,540 তারপর যখন তার recursive বার বার কল করে তোলে, 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 এবং তারপর এটা আবার কি এবং এটি ফিরতি বার পৌঁছাতে হবে (এক্স - 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 তাই এই লেঙ্গুড় recursion ভাল. 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 বার কল ঠিক হয় recursive কল ফিরে. 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 এবং এছাড়াও, যদি আপনি লেঙ্গুড় recursive সংস্করণ আছে না, 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 যদি ফাংশন হয়, যদি আপনি ভালো কিছু করতে লেঙ্গুড় recursive না - 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 বার (এক্স - 1). 624 00:52:16,260 --> 00:52:23,560 তাই এখন দণ্ড (এক্স - 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 এটি recursive লেঙ্গুড় না. 628 00:52:34,410 --> 00:52:37,590 [ছাত্রদের] আমি একটা recursion একটি লেঙ্গুড় recursion জন্য তাগ আনতে চেষ্টা চান - 629 00:52:37,590 --> 00:52:41,450 [Bowden] একটি আদর্শ বিশ্বের CS50 মধ্যে, কিন্তু আপনাকে করতে হবে না. 630 00:52:43,780 --> 00:52:49,280 যাতে লেঙ্গুড় recursion পেতে সাধারণত, আপনি একটি অতিরিক্ত সেট আপ যুক্তি 631 00:52:49,280 --> 00:52:53,550 যেখানে y বারের মধ্যে int x নিতে হবে 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 যাতে মাত্র একটি উচ্চ পর্যায়ের কিভাবে আপনি জিনিষ লেঙ্গুড় recursive হতে রুপান্তর. 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 করছেন কিন্তু recursive কলগুলি ব্যবহার করে. 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 বাইট প্রয়োজন কারণ সবসময় আপনি নাল টারমিনেটর প্রয়োজন. 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] এই ঠ পড়ুন যাচ্ছে. 656 00:55:12,490 --> 00:55:20,460 [ছাত্রদের] আমরা গুলি + 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 [ছাত্রদের] সুতরাং সব অ্যারে আসলে ঠিক পয়েন্টার দেয়া হল. 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 এক্স কোথাও সঞ্চিত হয় না. 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 এটা গৃহস্থালি * s-এর সাথে যে না কারণ গুলি হল একটি প্রকৃত পয়েন্টার পারেন. 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 [ছাত্রদের] প্রতি নির্দেশ 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-* পি = 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 মত হাস্যকর (* পি [-. কিছু একেবারে হাস্যকর এমনকি আমি জানি না. 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 এমনকি সিনট্যাক্স এত প্রাচীন যে যদি আপনি এটি ব্যবহার করেন, মানুষের baffled করা হবে না. 703 00:59:39,670 --> 00:59:43,540 বহুমাত্রিক অ্যারে হয় চমত্কার বিরল হিসাবে এটা. 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 মধ্যে খুব কমই আপনি চলুন যাও বহুমাত্রিক অ্যারে ব্যবহার করা হবে. 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 এবং তার মানে তাদের যদি এই সীমানা অতিক্রম করে যায় একটি অ্যারের ঘটবে, 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 এই ম্যাপিং পেতে মুছে ফেলা এবং তারপর এটা এইসব অন্যান্য জিনিসের জন্য সামান্য ব্লকগুলি ব্যবহার বিনামূল্যে. 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 র malloced অ্যারের একটি পয়েন্টার, 739 01:02:41,810 --> 01:02:47,060 এটি একই ভাবে চিকিত্সা করা হচ্ছে. 740 01:02:50,590 --> 01:02:53,340 [ছাত্রদের] সুতরাং অ্যারে গাদা হয়? 741 01:03:01,400 --> 01:03:05,270 [Bowden] অ্যারেগুলির গাদা হয় না. >> [ছাত্রদের] ওহ. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] অ্যারের এই ধরনের স্ট্যাক করা tends 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 * sizeof (int-)); গাদা যেতে হবে. 747 01:03:26,960 --> 01:03:31,870 কিন্তু এই বিন্দু পরে আমি প্রায় কাছাকাছি একই উপায়ে এবং এক্স পি ব্যবহার করতে পারেন, 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 আমি বলতে পারে পি পি [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 [ছাত্রদের] আপনি কি পি * আপনি যদি বন্ধনী আছে কি না? 755 01:04:07,390 --> 01:04:11,720 বন্ধনী একটি অন্তর্নিহিত dereference. >> ঠিক আছে. 756 01:04:11,720 --> 01:04:20,200 বাস্তবিক এছাড়াও, আপনার সাথে কি বলছে তা বহুমাত্রিক অ্যারে আপনি পেতে পারেন 757 01:04:20,200 --> 01:05:02,650 পয়েন্টার সাথে, কি কি করতে পারবেন হয় ভালো কিছু, এর কথা বলা যাক, int-** পিপি = 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 আমি কি এখানে কি হয় - যে পিপি [i] উচিত. 762 01:05:48,910 --> 01:05:53,680 সুতরাং পিপি একটি পয়েন্টার একটি পয়েন্টার. 763 01:05:53,680 --> 01:06:02,420 আপনি 5 int বড় একটি অ্যারের নির্দেশ পিপি mallocing করছি. 764 01:06:02,420 --> 01:06:10,950 তাই মেমরি আপনাকে স্ট্যাকের পিপি আছে 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 আমি পিপি [3] [4], কিন্তু এখন এই একই জিনিস নয় হিসাবে বহুমাত্রিক অ্যারে বলতে পারে 773 01:06:58,030 --> 01:07:05,390 কারণ বহুমাত্রিক অ্যারে এটি অনুবাদ [3] [4] মধ্যে একটি একক x অ্যারের মধ্যে অফসেট. 774 01:07:05,390 --> 01:07:14,790 এই dereferences পি, তৃতীয় সূচক ব্যবহারের তারপর, যে dereferences 775 01:07:14,790 --> 01:07:20,790 এবং accesses - 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 তাই এই টেকনিক্যালি সাহায্যে বহুমাত্রিক অ্যারে আছে 782 01:07:50,420 --> 01:07:53,550 যেখানে প্রতিটি অ্যারের হয় বিভিন্ন আকারের. 783 01:07:53,550 --> 01:07:58,000 তাই আমি মনে করি খাঁজকাটা বহুমাত্রিক অ্যারে কি বলা এর 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-*** পি আছে এবং তারপর আমি একটি dereferencing না এবং আমি বলতে পি * সমান এই মান, 791 01:08:35,649 --> 01:08:39,560 এটি শুধুমাত্র dereferencing 1 স্তর যাচ্ছে না? >> হ্যাঁ. 792 01:08:39,560 --> 01:08:43,340 সুতরাং যদি আমি সেই যে শেষ পয়েন্টার নির্দেশ করা হয় অ্যাক্সেস করতে চান - 793 01:08:43,340 --> 01:08:46,210 তারপর আপনি *** পি না. >> ঠিক আছে. 794 01:08:46,210 --> 01:08:54,080 তাই এই হল 1 ব্লক, পয়েন্ট আরেকটি ব্লক করা, অন্য একটি পয়েন্ট ব্লক যাও যাও পি পয়েন্ট. 795 01:08:54,080 --> 01:09:02,010 তারপর যদি আপনি * কাজ পি = অন্য কিছু, তাহলে এই পরিবর্তনের সময় 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 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস বরাদ্দ করা যাচ্ছে না 802 01:09:36,310 --> 01:09:40,670 যেখানে এক্স অ্যারের শুরুর দিকে নির্দেশ করে যাচ্ছে. 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 এটি পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস, তাই এটি যাও 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 এবং আপনি এই অপব্যবহার এবং কিছু বলতে পারেন ভালো গৃহস্থালি * গ = (গৃহস্থালি *) x; 814 01:11:19,750 --> 01:11:23,050 এবং এখন গ যাও x হিসাবে একই ঠিকানা হবে. 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 >> কিন্তু গ শুধু একটি পয়েন্টার হতে হবে, যাতে সি + + 'পুরোপুরি বৈধ এবং এটি 1 দ্বারা বাড়াতে হবে. 825 01:12:22,610 --> 01:12:32,440 যদি গ ঠিক ছিল কোন int *, তারপর গ + 104 হবে. 826 01:12:32,440 --> 01:12:41,250 + আছে পয়েন্টার এরিথমেটিক ঠিক যেমন সি + 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 যদি আমি এক্স প্রেরণ করার জন্য, আমি এই ঠিকানা পার করছি. 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], এবং এখন পর্যন্ত হিসাবে recursive কল উদ্বিগ্ন হয়, 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 [ছাত্রদের] আমরা যদি বা না করা একটি ampersand না - কি যে হয়? >> রাশি? 846 01:14:20,050 --> 01:14:23,200 [ছাত্রদের] রাশি. >> টেকনিক্যালি, dereference অপারেটর, কিন্তু আছে - >> [ছাত্রদের] Dereference. 847 01:14:23,200 --> 01:14:29,310 >> যদি আমরা একটি নক্ষত্র অথবা একটি ampersand করা না, কি হবে যদি আমি বলতে 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 এখন, এক্স এবং ওয়াই বিন্দু একই জিনিস. >> একই জিনিস যাও [ছাত্রদের] পয়েন্ট. 850 01:14:38,270 --> 01:14:45,180 এবং যদি কোন int x হল পয়েন্টার? >> কারণ এটা আপনি পয়েন্টার ধার্য করতে পারেন না অভিযোগ করে. 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 - সত্যিই সমস্ত 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 i = (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 এর এক্স বা কাস্টিং int-এর int-ঢালাই করা হবে? 862 01:16:00,290 --> 01:16:03,700 [Bowden] কি? 863 01:16:03,700 --> 01:16:07,690 [ছাত্রদের] ঠিক আছে. এই প্রথম বন্ধনী পর সেখানে একটি এক্স বা Ay হতে যাচ্ছে? 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 আপনি কেবলমাত্র পয়েন্টার সঙ্গে মোকাবিলা এবং ইন্টিজার সঙ্গে মোকাবিলা করতে পারে না 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 এবং আমি ধার্য মুক্ত - সম্ভবত যাওয়ার জন্য না ঢালাই এ yelled পেতে 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 >> [ছাত্রদের] ইয়ে! [সাধুবাদ] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]