[Powered by Google Translate] [অনুচ্ছেদ 4 - আরো আরামদায়ক]
[Rob Bowden - হার্ভার্ড বিশ্ববিদ্যালয়]
[এটি CS50. - CS50.TV]
আমরা একটি ব্যঙ্গ আগামীকাল আছে, যদি না আপনি যে জানেন না.
সবকিছু আপনি বর্গ অথবা দেখা বর্গ দেখা উচিত পারে মূলত এর.
যে পয়েন্টার অন্তর্ভুক্ত রয়েছে, যদিও তারা একটি খুব সাম্প্রতিক বিষয়.
আপনি তাদের মধ্যে উচ্চ মাত্রার অন্তত বুঝতে উচিত.
কিছু যে বর্গ সালে সর্বস্বান্ত উপর আপনি ব্যঙ্গ জন্য বুঝতে হবে.
তাই আপনি যদি তাদের প্রশ্ন থাকে, তাহলে আপনি তাদের জিজ্ঞাসা করতে পারেন এখন.
কিন্তু এই একটি খুব ছাত্র নেতৃত্বাধীন সময় হবে যেখানে আপনি না প্রশ্ন জিজ্ঞাসা করা হয়,
তাই আশা জনের প্রশ্ন আছে.
কেউ কি আমার প্রশ্ন আছে?
হ্যাঁ. >> [ছাত্রদের] পয়েন্টার আপনি আবার শুরু করতে পারবো?
আমি উপর পয়েন্টার যাবেন.
আপনার ভেরিয়েবল সকল অগত্যা মেমরি বাস,
কিন্তু সাধারণত আপনি যে বিষয়ে এবং কি আপনি খালি x 2 + y + 3 এবং চিন্তা
এবং কম্পাইলার আউট যেখানে জিনিষ আপনি বাস করছেন জিনিসটা হবে.
আপনি একবার পয়েন্টার দিয়ে, কারবারী এখন আপনি স্পষ্টভাবে যারা মেমরি অ্যাড্রেস ব্যবহার করছেন করছি.
সুতরাং একটি একক চলক শুধুমাত্র একটি কোনো সময়ে একক ঠিকানায় কখনও বসবাস করবে.
যদি আমরা একটি পয়েন্টার ডিক্লেয়ার করতে চান, কি ধরনের অনুরূপ যাচ্ছে?
>> আমি একটা পয়েন্টার পি ডিক্লেয়ার করতে চান. কি টাইপ কেমন হয়েছে?
[ছাত্রদের] int-* পি. >> হ্যাঁ. সুতরাং int-* পি.
এবং কিভাবে আমি এটা x নির্দেশ করে? >> [ছাত্রদের] Ampersand.
[Bowden] সুতরাং আক্ষরিক ampersand বলা হয় অপারেটর এর ঠিকানা.
সুতরাং যখন আমি বলতে & x এটি পরিবর্তনশীল x মেমরির ঠিকানা হচ্ছে.
তাই এখন আমি পয়েন্টার পি আছে, এবং আমার কোথাও কোড আমি * পি ব্যবহার করতে পারেন
অথবা আমি এক্স ব্যবহার এবং এটি সঠিক একই জিনিস হতে থাকবে.
(* পি). এই কি করছেন? কি যে তারা কি বোঝাতে চেয়েছেন?
[ছাত্রদের] এটি যে বিন্দুতে একটি মান মানে. >> হ্যাঁ.
সুতরাং আমরা যদি এটা তাকান, এটা চিত্র আঁকা আউট খুব উপযোগী হতে পারে
যেখানে এই একটি মেমরি একটু x এর জন্য বক্স, যার মূল্য 4 আছে এরকম,
তারপর আমরা একটি মেমরি সামান্য পি জন্য বাক্স আছে,
এবং তাই এক্স পি যাও পয়েন্ট, তাই আমরা থেকে পি x এর একটি তীর আঁকা.
সুতরাং যখন আমরা বলতে * পি বাক্স আমরা যে পি যেতে বলছে.
রাশি তীর অনুসরণ করা হয় এবং তারপর যাই হোক না কেন না আপনি যে বক্স সঙ্গে চান অধিকার আছে.
তাই আমি * পি = 7 বলতে পারে; এবং যে যে বাক্সে হল x 7 এবং যে পরিবর্তন হবে.
অথবা আমি বলতে পারে int-z '= * পি * 2; যে বিভ্রান্তিকর এর কারণ এটি এর তারকা, তারকা.
এক তারকা পি dereferencing হয়, অন্যান্য তারকা 2 দ্বারা গুন করা হয়.
উল্লেখ্য, আমি ভাল x এর সঙ্গে * পি প্রতিস্থাপিত হতে পারে.
আপনি একই ভাবে তাদের ব্যবহার করতে পারেন.
এবং তারপর পরে আমি পি বিন্দু একটি সম্পূর্ণ নতুন জিনিস থাকতে পারেন.
আমি শুধু বলতে পারেন পি = &z;
সুতরাং এখন কোন x যাও আর পয়েন্ট P; এটি z-স্থানটিকে.
এবং যে কোন সময় আমি * পি এটা z-এর মত একই কাজ.
তাই এই সম্পর্কে দরকারী জিনিষ একবার আমরা শুরু ফাংশন মধ্যে পেয়ে.
>> এটা অকাজের ধরনের একটি পয়েন্টার ডিক্লেয়ার কিছু যে পয়েন্ট
এবং তারপর আপনি এটি করছেন dereferencing
যখন আপনার সাথে শুরু মূল পরিবর্তনশীল ব্যবহৃত হতে পারে.
কিন্তু আপনি যখন ফাংশন ঢোকা - তাই কিছু বলতে আমরা কিছু ফাংশন, int-foo বিন্যাস আছে,
যে একটি পয়েন্টার নেয় এবং ঠিক আছে = 6 * পি;
ভালো লেগেছে আমরা swap 'র সঙ্গে আগে দেখেছি, আপনি একটি কার্যকর করতে swap এবং একটি পৃথক ফাংশন ব্যবহার করতে পারবেন না
দ্বারা শুধুমাত্র পূর্ণসংখ্যা ক্ষণস্থায়ী কারণ সি সবকিছু সবসময় মান দ্বারা হয় ক্ষণস্থায়ী.
এমনকি যখন আপনি পয়েন্টার পার করছেন আপনি মান দ্বারা পার করছি.
এটা ঠিক যে যারা মান মেমরি অ্যাড্রেস.
সুতরাং যখন আমি বলতে foo বিন্যাস (পি); আমি ফাংশন মধ্যে foo বিন্যাস করছি পয়েন্টার ক্ষণস্থায়ী
এবং তারপর foo বিন্যাস করছেন * পি = 6 হয়;
তাই ভিতর যে ফাংশন, * পি এখনও সমতুল্য x যাও,
কিন্তু আমি যে ফাংশন ভিতরে এক্স ব্যবহার করে না, কারণ এটা যে ফাংশানের মধ্যে scoped না পারেন.
সুতরাং * পি = 6 হয় একমাত্র উপায় আমি অন্য একটি ফাংশান থেকে স্থানীয় পরিবর্তনশীল অ্যাক্সেস করতে পারেন.
বা, ভাল, পয়েন্টার হয় একমাত্র উপায় আমি অন্য একটি ফাংশান থেকে স্থানীয় পরিবর্তনশীল অ্যাক্সেস করতে পারেন.
[ছাত্রদের] বিশ্বকাপ বলতে আপনি একটি পয়েন্টার ফেরত চেয়েছে. কিভাবে ঠিক কি হবে না?
[Bowden] মধ্যে int-y = 3 ভালো কিছু হিসাবে একটি পয়েন্টার ফেরত; রিটার্ন & y? >> [ছাত্রদের] হ্যাঁ.
[Bowden] ঠিক আছে. আপনি কখনো এটা করা উচিৎ. এই খারাপ.
আমি মনে করি আমি এই বক্তৃতা স্লাইড দেখেছি আপনাকে শুরু এই মেমরি পুরো চিত্রটি প্রেক্ষণ
এখানে আপনি যেখানে আপ 0 পেয়েছিলাম মেমরি ঠিকানা করেছি
এবং এখানে নিচে মেমরির ঠিকানা যোগাড় 4 32 2 যাও বা আছে.
আমি তখন আপনাকে কিছু উপাদান এবং কিছু উপাদান পেয়েছেন এবং তারপর আপনি আপনার স্ট্যাকের আছে
এবং আপনি আপনার গাদা, যা শুধু আপনাকে শুরু শেখার সম্পর্কে, উদ্ভিন্ন পেয়েছেন.
[ছাত্রদের] স্ট্যাকের উপরে গাদা কি না?
>> হাঁ. গাদা উপরে হয়, তাই নয় কি? >> [ছাত্রদের] ভাল, সে উপরে 0 করান.
[ছাত্রদের] ওহ, সে উপরে 0 করান. >> [ছাত্রদের] ওহ, ঠিক আছে.
অস্বীকৃতি: যে CS50 সঙ্গে আপনি তা দেখতে এই পথ চলুন. >> [ছাত্রদের] ঠিক আছে.
এটা ঠিক যে যখন প্রথম আপনি stacks দেখছেন,
যখন আপনি একটি স্ট্যাক আপনি একে অপরের উপর জিনিষ stacking মনে মনে চাই.
তাই আমরা চারপাশে তাই এই স্ট্যাকের মধ্যে উপস্থিত একটি স্ট্যাক সাধারণতঃ একটা ভালো ক্রমবর্ধমান হয় টুসকি ঝোঁক
পরিবর্তে স্ট্যাকের ঝুলন্ত ডাউন. >> [ছাত্রদের] করবেন না টেকনিক্যালি গাদা বড় হয়ে যায় খুব, যদিও?
এটা কি আপনি কি বোঝাতে চেয়েছেন দ্বারা আপ হত্তয়া উপর নির্ভর করে.
স্ট্যাকের এবং গাদা সবসময় বিপরীত নির্দেশ বাড়া.
একটি স্ট্যাক সর্বদা অর্থে উদ্ভিন্ন যে তা ক্রমবর্ধমান এর
প্রতি বেশী মেমরি অ্যাড্রেস, এবং গাদা নিচে ক্রমবর্ধমান হয়
যে তা কম মেমরি অ্যাড্রেস এর প্রতি ক্রমবর্ধমান.
সুতরাং উপরের 0 এবং নিম্ন উচ্চ মেমরি অ্যাড্রেস.
তারা উভয় করছি মাত্র নির্দেশ বিরোধিতায় ক্রমবর্ধমান,.
[ছাত্রদের] আমি যে অভিপ্রেত কারণ আপনি বলেছেন আপনি নীচে স্ট্যাক করা
কারণ মনে হয় আরও বেশি ধারণাসম্পন্ন কারণ জন্য স্ট্যাকের মধ্যে উপস্থিত একটি গাদা শীর্ষে শুরু,
গাদা নিজেই এর উপর খুব বেশী, তাই that's - >> হ্যাঁ.
এছাড়াও আপনি উদ্ভিন্ন এবং বৃহত্তর হিসাবে গাদা মনে করি, কিন্তু আরো স্ট্যাকের তাই.
সুতরাং স্ট্যাকের এক যে আমরা উদ্ভিন্ন প্রদর্শন ধরনের চান.
কিন্তু সর্বত্র আপনি অন্যথায় সন্ধান শীর্ষে ঠিকানা 0 প্রদর্শন করতে যাচ্ছে
এবং সর্বোচ্চ নীচে মেমরি ঠিকানা, তাই এই হল আপনার মেমরি স্বাভাবিক দৃশ্য.
>> আপনি কি একটি প্রশ্ন আছে?
[ছাত্রদের] আপনি বলুন গাদা সম্পর্কে আমাদের আরো কিছু করতে পারি?
হাঁ. আমি একটি দ্বিতীয় যে যাও পাবেন.
প্রথমত, কেন & y ফিরে যাও ফিরে যাওয়াকে একটি খারাপ জিনিস,
স্ট্যাক আপনি স্ট্যাকের ফ্রেম যা র সমস্ত কর্ম ব্যবহার প্রতিনিধিত্বকারী একটি গুচ্ছ আছে
যা বলা হয়েছে.
আগের বিষয় উপেক্ষা করা, তাই সবসময় আপনার স্ট্যাকের শীর্ষে প্রধান ফাংশন হতে যাচ্ছে
যেহেতু এটা প্রথম ফাংশন যে বলা হচ্ছে.
এবং তারপর যখন আপনি অন্য ফাংশন কল, স্ট্যাকে নিচে হত্তয়া যাচ্ছে.
সুতরাং যদি আমি কিছু ফাংশন, foo বিন্যাস, কল এবং এটা নিজস্ব স্ট্যাকের ফ্রেম পায়,
এটি কিছু ফাংশন, বার কল করতে পারেন; এটা নিজস্ব স্ট্যাকের ফ্রেম পায়.
এবং বার recursive এবং এটি নিজেই কল করতে পারেনি পারে,
এবং যাতে বার দ্বিতীয় কল তার নিজস্ব স্ট্যাকের ফ্রেম পাওয়া যাচ্ছে.
তাই এই স্ট্যাকের মধ্যে ফ্রেম কি যায় স্থানীয় ভেরিয়েবল সব
এবং ফাংশন আর্গুমেন্ট যে সব -
কোন লোকের জন্য এই ফাংশনটি স্থানীয়ভাবে scoped এই স্ট্যাকের মধ্যে ফ্রেম যান.
সুতরাং তার মানে যখন আমি বার মত একটি ফাংশন,
আমি শুধু একটি পূর্ণসংখ্যা এবং তারপর ঘোষণা করা হয় যে একটি পূর্ণসংখ্যা পয়েন্টার ফেরত যাচ্ছে.
যেখানে y বসবাস তাই না?
[ছাত্রদের] y বারের মধ্যে বসবাস করেন. >> [Bowden] হ্যাঁ.
কোথাও এই মেমরি একটু বর্গক্ষেত্র একটি বর্গক্ষেত্র littler যে এটা y আছে.
যখন আমি ফিরে & y, আমি এই মেমরি সামান্য ব্লক একটি পয়েন্টার ফেরত চাই.
কিন্তু তারপর যখন একটি ফাংশন আয়, তার স্ট্যাকের ফ্রেম স্ট্যাকের popped বন্ধ না হয়.
আর সে জন্যই এটি স্ট্যাকের বলা হচ্ছে.
এই স্ট্যাকের ডাটা স্ট্রাকচার মত, যদি আপনি কি জানেন যে যা.
ট্রে বা একটি স্ট্যাক ভালো এমনকি সর্বদা উদাহরণস্বরূপ,
প্রধান নীচে যেতে হবে তাহলে, আপনি প্রথম ফাংশন কল যে উপরে যেতে হবে,
এবং আপনি প্রধান ফিরে যাবেন না যতক্ষণ না আপনি সব ফাংশন যা বলা হয়েছে থেকে ফিরে যেতে পারেন
যে উপরে রাখা আছে.
>> [ছাত্রদের] সুতরাং যদি আপনি কি করবেন & y, ও যে মান বিষয় নোটিশ ছাড়াই পরিবর্তন ফিরে.
হ্যাঁ, it's - >> [ছাত্রদের] এটা মুছে ফেলা হতে পারে. >> হ্যাঁ.
এটি সম্পূর্ণরূপে এর - যদি আপনি চেষ্টা করুন এবং -
এটি হতে পারে কোন int * বার কারণ এটি একটি পয়েন্টার এর ফিরে চাই,
তাই তার রিটার্ন টাইপ হয় int-*.
আপনি যদি এই ফাংশন ফেরত মান ব্যবহার করার চেষ্টা করুন, এটি অনির্দিষ্ট আচরণ
কারণ যে পয়েন্টার খারাপ মেমরি স্থানটিকে. >> [ছাত্রদের] ঠিক আছে.
তাই যদি, উদাহরণস্বরূপ, আপনি ঘোষিত int-* y = malloc (sizeof (int-))?
এটা ভাল. হ্যাঁ.
[ছাত্রদের] আমরা কিভাবে স্বপ্ন যখন আমরা আমাদের রাসায়নিক পদ্ধতিতে ব্যবহার করা জিনিসকে আবার ব্যবহারের উপযোগী করে তোলা বিন জিনিষ টেনে আনুন
তারা আসলে মুছে ফেলা না থাকেন; আমরা শুধু তাদের পয়েন্টার হারান.
তাই এই ক্ষেত্রে আসলে আমরা মান বা মুছিয়া ফেলা হয় যা মেমরির মধ্যে এটি এখনও আছে?
অধিকাংশ অংশ জন্য, এটা এখনও হতে যাচ্ছে.
কিন্তু এর যাক বলতে আমরা কিছু অন্যান্য ফাংশন, baz কল ঘটেছে.
Baz এখানে তার নিজস্ব স্ট্যাকের ফ্রেম পাওয়া যাচ্ছে.
এই জিনিস সব overwriting করা যাচ্ছে,
এবং তারপর যদি পরে আপনি এবং চেষ্টা পয়েন্টার যে আপনি আগে পেয়েছিলাম ব্যবহার,
এটি একই মান করা যাচ্ছে না.
এটা ঠিক আছে, কারণ আপনি পরিবর্তিত ফাংশন baz আহ্বান করে যাচ্ছে.
[ছাত্রদের] কিন্তু আমরা এখনও আমরা ছিল, না 3 দিন পেতে পারি?
[Bowden] ইন সব সম্ভাবনা, আপনি কি.
কিন্তু আপনি যে নির্ভর করতে পারে না. সি শুধু অনির্দিষ্ট আচরণ বলছেন.
>> [ছাত্রদের] ওহ, এটা আছে. ঠিক আছে.
সুতরাং আপনি যখন একটি পয়েন্টার ফেরত চাই, এই হল যেখানে ব্যবহার malloc আসে.
আমি আসলে লেখার করছি মাত্র malloc ফিরে (3 * sizeof (int-)).
আমরা malloc উপর আরো একটি দ্বিতীয় যান, কিন্তু malloc ধারণা হয় করব আপনার স্থানীয় ভেরিয়েবল সব
স্ট্যাকের উপর সর্বদা যান.
কিছু যে malloced এর গাদা যায়, এবং এটা চিরকালের এবং সবসময় গাদা করা
যতক্ষণ পর্যন্ত আপনি স্পষ্টভাবে এটি মুক্ত.
তাই এই এর মানে হল যে যখন আপনি কিছু malloc, এটি ফাংশন আয় পরে বেঁচে যাচ্ছে.
[ছাত্রদের] বেঁচে থাকার পরে প্রোগ্রাম স্টপ চলমান হবে? >> নং
ঠিক আছে, তাই ওখানে পর্যন্ত প্রোগ্রাম সমস্ত উপায় চলমান কাজ করে যাচ্ছে. >> হ্যাঁ.
আমরা কি প্রোগ্রাম যখন স্টপ চলমান বিবরণ উপর যেতে পারেন.
আপনি আমাকে মনে করিয়ে, প্রয়োজন কিন্তু যে সম্পূর্ণ একটি আলাদা জিনিস হতে পারে.
[ছাত্রদের] সুতরাং malloc একটি পয়েন্টার সৃষ্টি? >> হ্যাঁ.
Malloc - >> [ছাত্রদের] আমি মনে করি malloc মেমরি যা একটি পয়েন্টার ব্যবহার করতে পারেন একটি ব্লক designates.
[Bowden] আমি যে চিত্রটি আবার চাই. >> [ছাত্রদের] সুতরাং এই ফাংশান কাজ করে যদিও,?
[ছাত্রদের] হ্যাঁ, malloc মেমরি একটি ব্লক যা আপনি ব্যবহার করতে পারেন designates,
এবং তারপর এটি যে মেমরি প্রথম ব্লক ঠিকানা ফেরৎ.
>> [Bowden] হ্যাঁ. সুতরাং যখন আপনি malloc, মেমরির কিছু ব্লক দখল করছি
যে গাদা বর্তমানে এর.
যদি গাদা খুবই ছোট, তারপর গাদা শুধু বাড়া হবে, এবং এটি এই দিক বৃদ্ধি.
তাই কিছু বলতে গাদা খুবই ছোট.
তারপর এটা একটা সামান্য বিট এবং হত্তয়া এই ব্লক যে শুধু বেড়ে একটি পয়েন্টার ফেরত সম্পর্কে.
যখন আপনি বিনামূল্যে স্টাফ, আপনি গাদা মধ্যে আরও জায়গা তৈরি করছি,
অতএব, পরবর্তী malloc কল যে মেমরি যা পূর্বে আপনাকে মুক্ত করে পুনরায় ব্যবহার করতে পারেন.
malloc এবং বিনামূল্যে সম্পর্কে গুরুত্বপূর্ণ ব্যাপার হল এটি আপনাকে সম্পূর্ণ নিয়ন্ত্রণ করতে সক্ষম হবেন
উপর এই মেমরি ব্লক জীবনকাল.
গ্লোবাল ভেরিয়েবল সবসময় জীবিত.
স্থানীয় ভেরিয়েবেলগুলো সুযোগ তাদের মধ্যে জীবিত.
যত তাড়াতাড়ি আপনি একটি কোঁকড়া বক্রবন্ধনী গত যান, স্থানীয় ভেরিয়েবেলগুলো মৃত.
Malloced মেমরি জীবিত যখন আপনি এটি জীবিত হতে চান
এবং তারপর যখন আপনি এটি করা মুক্তি বলতে মুক্তি হয়.
যারা আসলে কেবল মেমরি 3 ধরনের, সত্যিই.
স্বয়ংক্রিয় মেমরি ব্যবস্থাপনা, যা স্ট্যাকের আছে.
থিংস আপনার জন্য স্বয়ংক্রিয়ভাবে ঘটেছে.
আপনি যখন int x বলে, int x এর জন্য মেমরি বরাদ্দ করা হয়.
যখন এক্স সুযোগ গুটিয়ে ফেলে, x এর জন্য মেমরি পুনরায় দাবি করা হয়.
তারপর ডাইনামিক মেমরি ব্যবস্থাপনা, যা কি malloc হয় আছে,
যখন যা আপনি নিয়ন্ত্রণ আছে.
আপনি পরিবর্তনশীল সিদ্ধান্ত কখন মেমরি বরাদ্দ করা উচিত এবং না করা উচিত.
এবং তারপর স্ট্যাটিক আছে, ঠিক করা হয় যার ফলে এটি চিরকালের জীবন,
যা কি গ্লোবাল ভেরিয়েবল আছে.
তারা যা মেমরির মধ্যে করছেন সবসময়.
>> প্রশ্ন?
[ছাত্রদের] ঠিক কোঁকড়া বন্ধনী ব্যবহার করে আপনি একটি ব্লক সংজ্ঞায়িত করতে পারি
কিন্তু করতে হচ্ছে না যদি একটি বিবৃতি বা করার মত যে বিবৃতি বা কিছু?
আপনি একটি ফাংশন হিসাবে একটি ব্লক, কিন্তু সংজ্ঞায়িত করতে পারেন যে কোঁকড়া ধনুর্বন্ধনী খুব আছে.
[ছাত্রদের] সুতরাং আপনি মাত্র একটি কোঁকড়া ধনুর্বন্ধনী র্যান্ডম জুড়ি এর মত আপনার কোড আছে না পারেন
যে স্থানীয় ভেরিয়েবল আছে? >> হ্যাঁ, আপনি পারেন.
এর int-বার ভিতর আমরা {int-y = 3;} পারে.
যে অধিকার এখানে করা অনুমিত এর.
কিন্তু সম্পূর্ণরূপে যে int-y সুযোগ সংজ্ঞায়িত করে.
যে দ্বিতীয় কোঁকড়া বক্রবন্ধনী পরে, y আর ব্যবহার করা যাবে না.
আপনি প্রায় কখনও যে যদিও,.
কি প্রোগ্রাম যখন শেষ ফেরা,
একটি ভুল ধারণা / অর্ধ মিথ্যা যে আমরা প্রদান করার জন্য জিনিসের সহজতর ধরনের আছে.
আমরা আপনাকে বলে যে আপনি যখন মেমরি বরাদ্দ করা
আপনি যে পরিবর্তনশীল জন্য করছি উপস্থিত RAM-র কিছু খণ্ড বণ্টন.
কিন্তু আপনি সরাসরি স্পর্শ করছি না সত্যিই আপনার প্রোগ্রাম উপস্থিত RAM-কখনও.
আপনি যদি মনে করে, কিভাবে আমি সৃষ্টি -
এবং প্রকৃতপক্ষে, যদি আপনি GDB যান মাধ্যমে আপনি একই জিনিস দেখতে পাবেন.
তথাপি কতবার আপনি আপনার প্রোগ্রাম বা প্রোগ্রাম আপনি কি চালাচ্ছেন চালানো,
স্ট্যাকের সর্বদাই শুরু যাচ্ছে -
আপনি সবসময় করছি ঠিকানা oxbffff কিছু চারপাশে দেখতে ভেরিয়েবল যাচ্ছে.
এটা সাধারণত যে কোন অঞ্চলের কোথাও.
কিন্তু কিভাবে সম্ভবত 2 প্রোগ্রাম পয়েন্টার একই মেমরি উপস্থিত থাকতে পারবে?
[ছাত্রদের] কিছু যেখানে oxbfff উপস্থিত RAM-র উপর করা অনুমিত হয় নির্বিচারে উপাধি নেই
আসলে বিভিন্ন সময় ফাংশন বলা হয় তার উপর নির্ভর করে স্থান হতে পারে.
হাঁ. শর্ত ভার্চুয়াল মেমরি.
ধারণা করা হয় যে প্রত্যেক একক প্রক্রিয়া, প্রতি একক প্রোগ্রাম যা আপনার কম্পিউটারে চলমান
নিজস্ব আছে - সম্পূর্ণ স্বতন্ত্র অ্যাড্রেস স্পেস - এর যাক 32 বিট নিই না.
এটি ঠিকানা স্থান.
এটা নিজস্ব সম্পূর্ণ স্বতন্ত্র ব্যবহার 4 গিগাবাইট আছে.
>> তাই আপনি যদি একযোগে 2 প্রোগ্রাম চালানো, এই প্রোগ্রাম থেকে 4 গিগাবাইট সূচিত,
এই প্রোগ্রাম নিজেকে 4 গিগাবাইট সূচিত,
এবং এটি জন্য এই প্রোগ্রাম dereference যাও এর অসম্ভব একটি পয়েন্টার
এবং এই প্রোগ্রাম থেকে মেমরি শেষ.
এবং কি ভার্চুয়াল মেমরি হয় একটি প্রসেস ঠিকানা স্থান থেকে একটি ম্যাপিং
উপস্থিত RAM-র উপর আসল জিনিস.
সুতরাং আপনার অপারেটিং সিস্টেমের উপর নির্ভর করে যে জানি,
অঁ্যা, যখন এই লোক dereferences পয়েন্টার oxbfff, সত্যিই মানে
তিনি উপস্থিত RAM-র বাইটের 1000 চায়,
পক্ষান্তরে যদি এই প্রোগ্রাম dereferences oxbfff, সত্যিই তিনি RAM-10000 বাইট চায়.
তারা নির্বিচারে পর্যন্ত সরাইয়া হতে পারেন.
এই একটি একক প্রসেসের অ্যাড্রেস স্পেস মধ্যে জিনিষ এমনকি সত্য.
সুতরাং মত নিজেকে সব 4 গিগাবাইট সূচিত, কিন্তু এর যাক বলে -
[ছাত্রদের] প্রতি একক প্রক্রিয়া কি -
চলুন শুরু করা যাক বলতে আপনি কেবলমাত্র 4 গিগাবাইট RAM-র সাথে একটি কম্পিউটার আছে.
কি প্রতি একক প্রক্রিয়া পুরো 4 গিগাবাইট দেখতে? >> হ্যাঁ.
কিন্তু 4 গিগাবাইট পায় একটি মিথ্যা.
এটি শুধু এটা মনে এই সব স্মৃতি আছে, কারণ এটা অন্য কোনো প্রক্রিয়া বিদ্যমান আছে জানি না.
এটা শুধুমাত্র হিসাবে অনেক মেমরি হিসাবে প্রকৃতপক্ষে এটি ব্যবহার করার প্রয়োজন হবে.
অপারেটিং সিস্টেমে উপস্থিত RAM-র এই প্রক্রিয়া দিতে হবে না
যদি এই সমগ্র অঞ্চলের কোনো মেমরি ব্যবহার করে না.
এটা যে কোন অঞ্চলের জন্য মেমরি দিতে যাচ্ছে না.
কিন্তু ধারণা করা হয় যে - আমি মনে করার চেষ্টা করছি - আমি একটি উপমা মনে করতে পারেন না.
অ্যানালজিস কঠিন.
এক ভার্চুয়াল মেমরি সংক্রান্ত বিষয় বা জিনিস এটি সমাধানের এর এক
যে প্রসেস পরস্পর সম্পূর্ণ অনবগত করা উচিত.
এবং যাতে আপনি কোনো প্রোগ্রাম লিখতে পারেন যে ঠিক কোন পয়েন্টার dereferences,
চাই শুধু একটি প্রোগ্রাম যা বলছেন * (ox1234) লিখুন,
এবং যে এর dereferencing মেমরি ঠিকানা 1234.
>> কিন্তু এটি অপারেটিং সিস্টেমের উপর নির্ভর করে কি উপায় অনুবাদ 1234.
তাই আপনি যদি 1234 এই প্রক্রিয়ার জন্য একটি বৈধ মেমরি ঠিকানা হতে হবে,
মত স্তুপ বা কোনো কিছুর উপর এর পরে, এই যে মেমরি ঠিকানার মান প্রত্যাবর্তন করা
যতদূর প্রক্রিয়া জানেন.
কিন্তু যদি হয় 1234, ভালো তা জমির এরকম একটি বৈধ ঠিকানা না
কিছু মেমরি একটু এখানে টুকরা স্ট্যাকের বাইরে হয় এবং তার পরেও গাদা
এবং তারপর আপনি যে, যে যখন আপনি segfaults ভালো জিনিস পেতে সত্যিই ব্যবহার করেন নি
কারণ আপনি মেমরি স্পর্শ করছি যে আপনি স্পর্শ করা উচিত নয়.
এই সত্য -
একটি 32 বিট সিস্টেম, 32 বিট এর মানে হল আপনাকে একটা মেমরি ঠিকানা সংজ্ঞায়িত 32 বিট আছে.
এটা কেন হয় পয়েন্টার 8 বাইট কারণ 32 বিট বাইট 8 - বা 4 বাইট.
পয়েন্টার 4 বাইট.
সুতরাং যখন আপনি oxbfffff মত একটি পয়েন্টার দেখতে, যা -
কোনো প্রোগ্রাম মধ্যে আপনি ঠিক কোন অবাধ পয়েন্টার গঠন করা যেতে পারে,
কোথাও থেকে ox0 যাও ঋষভ 8 f's - ffffffff.
[ছাত্রদের] আপনি বলুন তারা 4 বাইট কি না? >> হ্যাঁ.
[ছাত্রদের] তারপর প্রতিটি বাইট থাকবে - >> [Bowden] হেক্সাডেসিমেল.
হেক্সাডেসিমেল - 5, 6, 7, 8. পয়েন্টার সুতরাং আপনি সবসময় হেক্সাডেসিমেল দেখতে চলুন.
এটা কিভাবে আমরা পয়েন্টার শ্রেণীভুক্ত.
প্রতিটি হেক্সাডেসিমেল সংখ্যা 2 1 বাইট.
সুতরাং যাচ্ছে যাও 8 4 বাইট জন্য হেক্সাডেসিমাল সংখ্যা আছে এর.
তাই প্রতি একটি 32 বিট সিস্টেমে একক পয়েন্টার যাও 4 বাইট হতে হবে,
যার মানে হল যে আপনার প্রক্রিয়ায় আপনি কোন অবাধ 4 বাইট গঠন করা যেতে পারে
এবং একটি পয়েন্টার করতে এটি আউট,
যার মানে যতটা এটা সচেতন, এটি একটি মেমরি 32 বাইট সমগ্র 2 সুরাহা করতে পারেন.
যদিও এটি সত্যিই যে অ্যাক্সেস নেই,
এমনকি যদি আপনার কম্পিউটারে 512 মেগাবাইট হয়েছে, এটা মনে যে স্মৃতি আছে.
এবং অপারেটিং সিস্টেম স্মার্ট যথেষ্ট যে এটি শুধুমাত্র বরাদ্দ আসলে আপনি কি প্রয়োজন হবে.
এটা কিন্তু ঠিক না উহু একটি নতুন পদ্ধতি,: 4 যোগাড় করে দেয়.
>> হাঁ. >> [ছাত্রদের] বৃষ মানে কি? আপনি কেন এটা লিখুন?
এটি শুধু হেক্সাডেসিমেল জন্য প্রতীক.
আপনি যখন বৃষ সঙ্গে একটি নম্বর শুরু দেখুন, ধারাবাহিক জিনিষ হেক্সাডেসিমেল.
[ছাত্রদের] আপনি কি প্রোগ্রাম যখন শেষ সম্পর্কে ব্যাখ্যা করা ছিল. >> হ্যাঁ.
কি ঘটে যখন একটি প্রোগ্রাম শেষ হল অপারেটিং সিস্টেম
শুধু ম্যাপিং যে এটি এই ঠিকানাগুলি জন্য রয়েছে, এবং যে এটা মুছে যাবে.
অপারেটিং সিস্টেম এখন শুধু আরেকটি প্রোগ্রাম ব্যবহার করার জন্য যে মেমরি দিতে পারেন.
[ছাত্রদের] ঠিক আছে.
সুতরাং যখন আপনি বা গাদা গাদা বা গ্লোবাল ভেরিয়েবল অথবা উপর কিছু কিছু বরাদ্দ করা,
তারা কেবলমাত্র সমস্ত প্রোগ্রাম যত তাড়াতাড়ি শেষ হয় অন্তর্হিত হওয়া
কারণ অপারেটিং সিস্টেম বর্তমানে অন্য কোন প্রক্রিয়ায় যে মেমরি দিতে বিনামূল্যে.
[ছাত্রদের] যদিও এখনও লিখিত হয় সম্ভবত আছে মান? >> হ্যাঁ.
মান সম্ভাবনা এখনও আছে.
এটা ঠিক এর এটা তাদের এ পেতে কঠিন হতে যাচ্ছে.
এটা অনেক কঠিন হয়ে তাদের এ পেতে তুলনায় এটি একটি ফাইল মুছে এ পেতে হয়
কারণ মোছা ফাইল ধরনের একটি দীর্ঘ সময়ের জন্য সেখানে অস্ত যায় এবং হার্ড ড্রাইভ অনেক বড়.
সুতরাং মেমরি বিভিন্ন অংশ মুছে ফেলা হচ্ছে
আগেই মেমরি চাঙ্গড় যে যে ফাইল হতে যাও ব্যবহৃত মুছে ফেলা হবে.
কিন্তু প্রধান মেমরি, উপস্থিত RAM-র, আপনি অনেক দ্রুত মাধ্যমে চক্র,
তাই এটি খুব দ্রুত মুছে ফেলা হতে যাচ্ছে.
এই বা অন্য কিছু প্রশ্ন?
[ছাত্রদের] আমি একটি ভিন্ন বিষয় সম্পর্কে আমার প্রশ্ন আছে. >> ঠিক আছে.
কেউ কি এই প্রশ্ন আছে?
>> ঠিক আছে. ভিন্ন বিষয়. >> [ছাত্রদের] ঠিক আছে.
আমি কিছু অভ্যাস পরীক্ষার মাধ্যমে চালু ছিল,
এবং তাদের এক এটি sizeof সম্পর্কে কথা ছিল
এবং এটা মান প্রত্যাবর্তন বা বিভিন্ন ধরনের পরিবর্তনশীল. >> হ্যাঁ.
এবং বলেন যে উভয় int এবং দীর্ঘ উভয় রিটার্ন 4, তাই তারা উভয় 4 বাইট দীর্ঘ.
এটা কি, কোন int এবং একটি দীর্ঘ মধ্যে কোনো পার্থক্য নেই বা এটি একই জিনিস?
হ্যাঁ, একটা পার্থক্য আছে.
সি মান -
আমি সম্ভবত না গিয়ে গড়বড় আপ.
সি মান ঠিক পছন্দ হয় কি হয় সি, সি সরকারী নথিপত্রে
এটি কি তা বলেছেন.
তাই শুধু সি মান বলছেন যে একটি গৃহস্থালি এবং চিরকালের জন্য সবসময় 1 বাইট হবে.
যে পরে সবকিছু - একটি সংক্ষিপ্ত সর্বদা হচ্ছে এর চেয়ে বড় বা সমান একটি গৃহস্থালি যাও হিসাবে শুধুমাত্র সংজ্ঞায়িত.
এই বৃহত্তর, কিন্তু না ইতিবাচক হতে পারে.
কোন int হচ্ছে এর চেয়ে বড় বা সমান একটি সংক্ষিপ্ত যাও হিসাবে শুধুমাত্র সংজ্ঞায়িত হয়.
এবং শুধুমাত্র একটি দীর্ঘ হচ্ছে এর চেয়ে বড় বা সমান কোন int হিসাবে সংজ্ঞায়িত করা হয়.
এবং একটি লম্বা দীর্ঘ থেকে বড় বা সমান দীর্ঘ.
তাই শুধু সি আদর্শ সংজ্ঞায়িত হয় সব কিছু আপেক্ষিক ক্রমানুসার.
প্রকৃত মেমরির পরিমাণ যে জিনিস লাগতে সাধারণত পর্যন্ত বাস্তবায়ন,
কিন্তু এটি এই সময়ে চমত্কার এর সংজ্ঞা. >> [ছাত্রদের] ঠিক আছে.
সুতরাং হাফপ্যান্ট প্রায় সবসময় 2 বাইট হতে হয় না.
Ints প্রায় সবসময় যাও 4 বাইট হতে যাচ্ছে.
লং longs প্রায় সবসময় যাও 8 বাইট হতে যাচ্ছে.
এবং longs, এটি কিনা তা আপনি একটি 32 বিট বা 64 বিট ব্যবহার করছেন সিস্টেমের উপর নির্ভর করে.
সুতরাং একটি দীর্ঘ সিস্টেমের ধরন মিলা যাচ্ছে.
আপনি যদি অ্যাপ্লায়েন্স মত একটি 32 বিট সিস্টেম ব্যবহার করছেন, এটা 4 বাইট হতে যাচ্ছে.
আপনি যদি সাম্প্রতিক কম্পিউটারের অনেক ভালো একটি 64 বিট ব্যবহার করছেন, এটি যাও 8 বাইট হতে যাচ্ছে.
>> Ints প্রায় সবসময় এই সময়ে 4 বাইট.
লং longs প্রায় সবসময় 8 বাইট.
অতীতে, ints শুধুমাত্র 2 বাইট ব্যবহার করা হয়.
কিন্তু লক্ষ্য করা যে এই সম্পূর্ণভাবে চেয়ে বড় এবং সমান মধ্যে এই সম্পর্ক সব সন্তুষ্ট.
তাই পুরোপুরি দীর্ঘ একটি পূর্ণসংখ্যা হিসাবে একই মাপ হতে নিষেধ,
এবং এটি একটি দীর্ঘ দীর্ঘ হিসাবে একই মাপ হতে এর অনুমোদিত.
এবং শুধু তাই যে সিস্টেমের মধ্যে 99,999%, তা সমান হতে হবে এরকম
হয় কোন int অথবা একটি লম্বা দীর্ঘ. এটা 32 বিট বা 64 বিট উপর নির্ভর করে. >> [ছাত্রদের] ঠিক আছে.
Floats ইন, কিভাবে হয় দশমিক বিন্দু বিট পদ মনোনীত?
বাইনারি হিসাবে পছন্দ? >> হ্যাঁ.
আপনি CS50 জন্য যা জানা প্রয়োজন হবে না.
আপনি 61 ​​সালে না এমনকি যে শিখবেন না.
আপনি যে সত্যিই কি জানতে কোনো অবশ্যই না.
এটি শুধু একটি উপস্থাপনা.
আমি সঠিক বিট allotments ভুলবেন না.
ফ্লোটিং পয়েন্ট ধারণা হয় যে আপনি একটি বিট উপস্থাপন নির্দিষ্ট নম্বর বরাদ্দ করা -
মূলত, বৈজ্ঞানিক স্বরলিপি সবকিছুই হয়.
সুতরাং আপনি একটি বিট যাও 1,2345 ভালো নম্বর নিজেই, প্রতিনিধিত্ব নির্দিষ্ট নম্বর বরাদ্দ করা.
আমি 5 অধিক সংখ্যার সাথে একটি নম্বর কখনও প্রতিনিধিত্ব করতে পারেন.
তারপর আপনি একটি নির্দিষ্ট বিটের সংখ্যা যাতে এটি ভালো হতে থাকে বরাদ্দ
আপনি শুধুমাত্র একটি নির্দিষ্ট নম্বর পর্যন্ত যেতে পারে, যেমন যে বৃহত্তম সূচক আপনি থাকতে পারে,
এবং আপনি কেবলমাত্র একটি নির্দিষ্ট সূচক নীচে যেতে পারেন,
পছন্দ যে ক্ষুদ্রতম সূচক আপনি থাকতে পারে.
>> আমি সঠিক পদ্ধতি বিট এই সমস্ত মান নির্ধারিত হয় না মনে রাখবেন,
কিন্তু একটি বিট নির্দিষ্ট সংখ্যক 1,2345 যাও উত্সর্গীকৃত করা হয়,
অন্য বিট নির্দিষ্ট সংখ্যক সূচক যাও উত্সর্গীকৃত করা হয়,
এবং এটি কেবলমাত্র একটি নির্দিষ্ট আকার একটি সূচক চিত্রিত করা সম্ভব.
[ছাত্রদের] এবং একটা ডবল? অতিরিক্ত দীর্ঘ float মত হল যে? >> হ্যাঁ.
এটা এখন আপনি পরিবর্তে 4 বাইটের 8 বাইট ব্যবহার করছেন ছাড়া একটি float হিসাবে একই জিনিস.
আপনি এখন থেকে 9 সংখ্যা বা 10 ডিজিটের ব্যবহার করতে পারবেন,
এবং এই 300 এর পরিবর্তে 100 পর্যন্ত যেতে সক্ষম হবে. >> [ছাত্রদের] ঠিক আছে.
এবং floats এছাড়াও 4 বাইট. >> হ্যাঁ.
আবার ভাল,, এটি সম্ভবত সাধারণ বাস্তবায়নের উপর নির্ভর করে সামগ্রিক,
কিন্তু floats 4 বাইট, টেনিস হল 8.
টেনিস ডবল বলা হয় কারণ তারা ডবল হয় floats মাপ হয়.
[ছাত্রদের] ঠিক আছে. এবং সেখানে ডবল দ্বিগুণ হয়? >> হইনি আছে.
আমি মনে করি - >> দীর্ঘ longs লেগেছে [ছাত্রদের]? >> হ্যাঁ. আমি ঠিক তা মনে করি না. হ্যাঁ.
গত বছরের পরীক্ষা অন [ছাত্রদের] প্রধান ফাংশন সম্পর্কে একটি প্রশ্ন ছিল
আপনার প্রোগ্রামের অংশ হতে হবে.
উত্তর ছিল যে এটা আপনার প্রোগ্রামের অংশ হতে হবে তা নয়.
কি অবস্থা? এটা কি আমি দেখেছি.
[Bowden] মনে হচ্ছে - >> [ছাত্রদের] কি অবস্থা?
আপনি কি সমস্যা আছে? >> [ছাত্রদের] হ্যাঁ, আমি অবশ্যই এটি থামা পারেন.
এটা হতে পারে, না টেকনিক্যালি আছে, কিন্তু মূলত এটা হতে যাচ্ছে.
[ছাত্রদের] আমি একটি ভিন্ন বছরের এক দেখেছি.
এটা সত্য অথবা মিথ্যা মত ছিল: একটি বৈধ - >> ওহ, গ একটি ফাইল.?
. [ছাত্রদের] কোন গ ফাইল উপস্থিত থাকা আবশ্যক - [একযোগে উভয় জানা - অপাচ্য]
ঠিক আছে. যাতে এর পৃথক.
>> একটি. গ ফাইল শুধু ফাংশন থাকে প্রয়োজন.
আপনি মেশিন কোড মধ্যে একটি ফাইল, বাইনারি, যাই হোক না কেন কম্পাইল করতে পারেন,
ছাড়া এটি হচ্ছে কোনো এক্সিকিউটেবল.
একটি বৈধ এক্সিকিউটেবল একটি প্রধান কার্যকারিতা থাকতে হবে.
আপনি 1 ফাইলে 100 ফাংশন কিন্তু কোন প্রধান লিখতে পারেন
এবং তারপর বাইনারি যে ডাউন কম্পাইল,
তারপর আপনি ফাইল অন্য যে শুধুমাত্র প্রধান লিখুন আছে কিন্তু কল এই ফাংশন একটি গুচ্ছ
এই এখানে মাধ্যমে বাইনারি ফাইল.
তাই যখন আপনি এক্সিকিউটেবল তৈরি করছি, তাই linker আছে
এটি এই 2 বাইনারি ফাইল মধ্যে একটি এক্সিকিউটেবল সম্মিলন.
সুতরাং একজন. গ ফাইলটি একটি প্রধান ফাংশন এ সব আছে করার দরকার নেই.
এবং বড় কোড ঘাঁটি আপনাকে. গ ফাইল এবং 1 টি প্রধান হাজার হাজার ফাইল দেখতে পাবেন.
আরো প্রশ্ন?
[ছাত্রদের] অন্য একটি প্রশ্ন ছিল.
বলা হয়েছে একটি কম্পাইলার. সত্য বা মিথ্যা?
এবং উত্তর মিথ্যা, এবং আমি কেন এটা বোঝা ঝনঝন ভালো না.
আমরা কি কিন্তু যদি এটা না করা না কল?
মূলত হয় না শুধু - আমি ঠিক কি তা কল দেখতে পারেন.
তবে এটা কমান্ড চালনা করে.
না.
আমি এই থামা পারেন. হাঁ.
ওহ, হাঁ. এছাড়াও তার যে আছে.
এই বলে উপযোগ করতে উদ্দেশ্য স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়
যা একটি বৃহৎ প্রোগ্রামের টুকরা করা প্রয়োজন recompiled যাও
কমান্ড এবং তাদের recompile ইস্যু.
যে ফাইলগুলি হয় একেবারে বিপুল করতে করতে পারেন.
ফাইলের সময় স্ট্যাম্পের এ দেখায় না এবং, যেমন আমরা পূর্বে বলেন,
আপনার ব্যক্তিগত ফাইল কম্পাইল করে, এবং এটি করতে পারেন না হওয়া পর্যন্ত আপনি linker পেতে না
তারা যে একটি এক্সিকিউটেবল পুরা করছি একসাথে.
তাই আপনি যদি 10 টা ভিন্ন ফাইল আছে এবং আপনি সেগুলির 1 পরিবর্তন করা,
তারপর কি কি করতে হবে ঠিক recompile যে 1 ফাইল
এবং তারপর একসাথে সবকিছু পুনরায় লিঙ্ক.
কিন্তু তুলনায় অনেক dumber.
এটি সম্পূর্ণরূপে যে কি এরকম করা উচিত সংজ্ঞায়িত আপনি আপ এর.
এটি ডিফল্টরূপে এই সময় স্ট্যাম্প উপাদান সনাক্ত করার ক্ষমতা আছে,
কিন্তু আপনি কিছু করতে করতে একটি ফাইল লিখতে পারেন.
আপনি একটি ফাইল করা যাতে যখন আপনি এটা অন্য ডিরেক্টরিতে সিডি এর জন্য টাইপ করুন. লিখতে পারেন
আমি হতাশ ছিল হচ্ছে কারণ আমি বন্ধনরজ্জু সবকিছু আমার অ্যাপ্লায়েন্স ভেতরে
এবং তারপর আমি ম্যাক থেকে পিডিএফ দেখতে.
>> সুতরাং ফাইন্ডারে যাও আমি এবং আমি যান যেতে না পারেন, সার্ভারের সাথে সংযোগ,
আমি এবং সার্ভারের সাথে সংযোগ করতে হয় আমার অ্যাপ্লায়েন্স, এবং তারপর আমি পিডিএফ খুলুন
যে LaTeX দ্বারা কম্পাইল করা হয়.
কিন্তু আমি হতাশ কারণ ছিল হচ্ছে প্রতি একক সময় আমি পিডিএফ রিফ্রেশ প্রয়োজন,
আমি একটি নির্দিষ্ট ডিরেক্টরির মধ্যে যে এটি অ্যাক্সেস করতে পারে কপি ছিল
এবং এটি বিরক্তিকর পেয়ে ছিল.
তাই আমি একটি ফাইল তৈরি করতে হবে, যা আপনাকে কিভাবে এটি জিনিস তোলে সংজ্ঞায়িত আছে লিখেছে.
কিভাবে আপনি করতে এই পিডিএফ LaTeX.
শুধু ভালো অন্য কোন করা ফাইল - বা আমি অনুমান করতে ফাইল দেখা না করে থাকেন,
কিন্তু অ্যাপ্লায়েন্স মধ্যে আমরা একটি বিশ্বব্যাপী করা ফাইলটি যে বলছেন আছে,
যদি আপনি একটি সি ফাইল কম্পাইল করা হয়, ঝনঝন শব্দ ব্যবহার করার জন্য.
তাই এখানে আমার জন্য যে ফাইলটি আমি না আমি,
এই ফাইলটি আপনি পিডিএফ LaTeX দিয়ে কম্পাইল করতে চান চলুন.
এবং তাই পিডিএফ LaTeX যে কম্পাইল এর করছেন.
কম্পাইল করা না হয়. এটা ঠিক এর ক্রম আমি উল্লিখিত এই কমান্ড নির্বাহনের অনুমতি.
সুতরাং পিডিএফ LaTeX রান, সেটি ডিরেক্টরিতে আমি চাই এটি কপি করা যাও যাও যাও এটি কপি করা,
সেটি ডিরেক্টরিতে এর সিডি এবং অন্যান্য জিনিস আছে,
কিন্তু সব কিছু আছে যখন একটি ফাইল পরিবর্তন সনাক্ত করা হয়,
এবং এটি যদি পরিবর্তন তাহলে, এটি কমান্ড যে এটি চালানোর জন্য অনুমিত এর চালানো হবে
যখন ফাইল পরিবর্তন. >> [ছাত্রদের] ঠিক আছে.
আমি যেখানে গ্লোবাল জন্য ফাইলগুলির জন্য সম্পর্কে এটি চেক জানি না.
অন্য প্রশ্ন? অতীত থেকে কিছু ক্যুইজ? কোন পয়েন্টার জিনিষ?
পয়েন্টার ভালো সঙ্গে সূক্ষ্ম জিনিস আছে -
আমি এটি একটি ব্যঙ্গ প্রশ্ন করতে সক্ষম হবে যাচ্ছি না -
কিন্তু ঠিক এই জিনিস সাজান.
নিশ্চিত করুন যে আপনি বুঝতে যখন আমি বলতে না int-* x * y -
এটি ঠিক এখানে কিছু না, আমি অনুমান.
কিন্তু ভালো * x * y, ও যারা আছে 2 ভেরিয়েবল স্ট্যাকের উপর যে হয়.
যখন আমি বলতে x = malloc (sizeof (int-)), এক্স এখনও স্ট্যাকের উপর একটি পরিবর্তনশীল,
malloc হয় গাদা উপর কিছু ব্লক, এবং আমরা গাদা করছি x বিন্দু হচ্ছে.
>> সুতরাং গাদা যাও স্ট্যাকের পয়েন্ট কিছু.
যখনই আপনি কিছু malloc, অবশ্যম্ভাবীরূপে আপনি এটি একটি পয়েন্টার ভেতরে সংরক্ষণ করছেন.
সুতরাং যে পয়েন্টার স্ট্যাকের হয়, malloced ব্লক গাদা হয়.
মানুষ অনেক পাওয়া যায় এবং বলতে * int x = malloc; x গাদা হয়.
নং কি এক্স স্থানটিকে গাদা হয়.
এক্স নিজেই স্ট্যাকের হয়, যদি না কোন কারনের জন্য আপনি x এর একটি বিশ্বব্যাপী পরিবর্তনশীল করা,
এটি মেমরি অন্য অঞ্চলের হয় যা ক্ষেত্রে এরকম ঘটে.
অবগত থাকার সুতরাং, এই বক্স এবং তীর ডায়াগ্রামে হয় ব্যঙ্গ জন্য সাধারণ প্রশংসনীয়.
অথবা যদি এটা ব্যঙ্গ 0 নয়, এটি 1 ব্যঙ্গ করা হবে.
আপনি এই সব জানেন, কম্পাইল করার প্রণালী উল্লিখিত ধাপগুলি উচিত
যেহেতু আপনি ঐ প্রশ্ন উত্তর ছিল. হ্যাঁ.
[ছাত্রদের] আমরা যারা পদক্ষেপ পুনরালোচনা করা যায়নি - >> শিওর.
ধাপ এবং কম্পাইল করার আগে আমরা preprocessing আছে,
কম্পাইল করার প্রণালী, একত্রিতকরনের, এবং লিঙ্ক.
Preprocessing. কি করব?
এটা হল সবচেয়ে সহজ ধাপ - ভাল, না ভালো -
এটা স্পষ্ট হওয়া উচিত না, এর মানে কিন্তু এটা সহজে পদক্ষেপ.
আপনি নিজের বলছি এটা বাস্তবায়ন করতে পারে. হাঁ.
[ছাত্রদের] ভালো কি আপনার মধ্যে অন্তর্ভুক্ত আছে নিন এবং এটি কপি করা হয় এবং তারপর তিনি সংজ্ঞায়িত করে.
এটা অন্তর্ভুক্ত করা # জিনিস যেমন দেখায় এবং # define,
এবং এটি শুধু কপি এবং pastes কি আসলে যারা মানে.
তাই যখন আপনি # cs50.h অন্তর্ভুক্ত, preprocessor এবং অনুলিপি cs50.h পেস্ট করা হয়
মধ্যে যে লাইন.
আপনি যখন বলতে # x 4 সংজ্ঞায়িত করা, preprocessor সমগ্র প্রোগ্রামের মাধ্যমে যায়
এবং 4 x এর সঙ্গে সমস্ত উদাহরণ প্রতিস্থাপন.
সুতরাং preprocessor একটি বৈধ সি ফাইল লাগে এবং একটি বৈধ সি ফাইল আউটপুট
যেখানে জিনিষ এবং অনুলিপি করা হয়েছে আটকানো.
তাই এখন কম্পাইল. কি করব?
[ছাত্রদের] এটা থেকে সি বাইনারি যায়.
>> [Bowden] এই সমস্ত উপায় আছে বাইনারি যান না.
[ছাত্রদের] তার মেশিন কোড তারপর? >> এটা মেশিন কোড না.
[ছাত্রদের] বিধানসভা? >> এসেম্বলি.
এই সভার পূর্বে যায় এটি সি কোড যাও সব নিয়ে যায়,
এবং অধিকাংশ ভাষার ভালো কিছু করতে.
কোনো উচ্চ স্তরের ভাষা, চয়ন করুন এবং যদি আপনি এটা কম্পাইল চলুন,
এটা পদক্ষেপে কম্পাইল সম্ভবত.
প্রথম এটি সি যাও পাইথন কম্পাইল করে যাচ্ছে, তারপর যাও সভার সি কম্পাইল করে যাচ্ছে,
এবং তারপর সভার বাইনারি অনুবাদ পাওয়া যাচ্ছে.
তাই কম্পাইল থেকে সি বিধানসভা এটা আনতে যাচ্ছে.
শব্দ কম্পাইল সাধারণত এর অর্থ হল একটি উচ্চতর স্তর থেকে এটি আনয়ন
একটি নিম্ন স্তরের প্রোগ্রামিং ভাষা.
তাই এই সংকলন শুধুমাত্র পদক্ষেপ যেখানে আপনি একটি উচ্চ স্তরের ভাষা দিয়ে শুরু
এবং একটি নিচু স্তরের ভাষায় শেষ পর্যন্ত, এবং যে কেন পদক্ষেপ কম্পাইল ও বলা হয়.
কম্পাইল করার সময় [ছাত্রদের], যাক এর যে আপনি # অন্তর্ভুক্ত করেছেন বলে cs50.h.
কম্পাইলার recompile cs50.h উইল, ভালো ফাংশন আছে যে,
যে অ্যাসেম্বলি কোড মধ্যে এবং হিসাবে ভাল অনুবাদ,
অথবা এটি কপি এবং কিছু যে প্রাক বিধানসভা হয়েছে আটকান হবে?
cs50.h কাছাকাছি শেষ পরিষদ হবে না.
ফাংশন এবং এগুলির নমুনা জিনিস ভালো স্টাফ শুধু জন্য আপনাকে সতর্কতা অবলম্বন করা আবশ্যক যাও.
এটা নিশ্চয়তা যে কম্পাইলার জিনিস চেক ভালো আপনি ফাংশন কলিং করতে পারেন
সঙ্গে অধিকার ফেরত ধরনের এবং ডান আর্গুমেন্ট এবং উপাদান.
>> সুতরাং cs50.h ফাইলে, preprocessed করা হবে এবং তারপরে যখন এটা কম্পাইল এর
এটি মূলত দূরে প্রক্ষিপ্ত এর পরে এটি নিশ্চিত যে সঠিকভাবে সবকিছু বলা হচ্ছে.
কিন্তু ফাংশন CS50 গ্রন্থাগারের সংজ্ঞায়িত, যা cs50.h থেকে পৃথক,
যারা আলাদা করে কম্পাইল করা হইনি.
আসলে লিঙ্ক ধাপে অবতরণ করা, তাই আমরা একটি দ্বিতীয় যে যাও পাবেন.
কিন্তু প্রথম, একত্রিতকরনের কি হয়?
[ছাত্রদের] বাইনারি যাও বিধানসভা? >> হ্যাঁ.
একত্রিতকরনের.
আমরা এটা কম্পাইল না কারণ বিধানসভার হয় প্রায় কাছাকাছি একটি বাইনারি খাঁটি অনুবাদ কল.
বিধানসভা থেকে যাচ্ছে বাইনারি যাও মধ্যে খুব অল্প লজিক নেই.
এটা কেবল এর মধ্যে একটি টেবিল খুঁজছি আপ করতে চান, ওহ, আমরা এই নির্দেশ আছে;
যে বাইনারি 01110 অনুরূপ.
এবং যে ফাইল তাই একত্রিতকরনের সাধারণত আউটপুট হয়. ণ ফাইল.
এবং. ণ ফাইলগুলি আমরা আগে কি ছিল বলার অপেক্ষা রাখে না,
কিভাবে একটি ফাইলে একটি প্রধান ফাংশন আছে করার দরকার নেই.
কোন একটি ফাইল. ণ দীর্ঘ ফাইল হিসাবে এটি একটি বৈধ সি ফাইল হিসাবে কম্পাইল করা যাবে না.
এটি. ণ ডাউন করে কম্পাইল করা যাবে.
এখন, লিঙ্ক কি আসলে একটি গুচ্ছ এনেছে. ণ ফাইল এবং একটি এক্সিকিউটেবল তাদের এনেছে.
তাই কি লিঙ্কিং আছে আপনার CS50 গ্রন্থাগারের একটি. ণ ফাইল হিসাবে মনে করতে পারেন.
এটি একটি ইতিমধ্যে কম্পাইল বাইনারি ফাইল.
তাই যখন আপনি আপনার ফাইল, আপনার hello.c, যা কল GetString কম্পাইল,
hello.c hello.o যাও পরার কম্পাইল ডাউন,
hello.o বাইনারি মধ্যে এখন হয়.
এটা ব্যবহার করে GetString, তাই এটি যাও cs50.o যাও পুনরালোচনা প্রয়োজন,
এবং linker তাদের একসঙ্গে smooshes এবং এই ফাইলের মধ্যে কপি করা GetString
এবং একটি এক্সিকিউটেবল যে সমস্ত কর্ম এটি প্রয়োজন আছে সঙ্গে আসে আউট.
সুতরাং cs50.o একটি আউটপুট ফাইলটি আসলে, না কিন্তু এটা বন্ধ যথেষ্ট যে কোন মৌলিক পার্থক্য আছে.
তাই শুধু লিঙ্ক ফাইলের একটি গুচ্ছ একসাথে এনেছে
যে আলাদাভাবে র সমস্ত কর্ম ব্যবহার থাকতে আমি ব্যবহার করতে হবে
এবং এক্সিকিউটেবল যে আসলে চালানো হবে সৃষ্টি.
>> এবং যাতে তিনি কি আমরা আগে বলছে ছিল
যেখানে আপনি 1000 আছে. গ ফাইল পারেন, আপনি কি তাদের সব. কম্পাইল ণ ফাইল,
যার ফলে সম্ভবত একটি সময় নিতে হবে তাহলে, আপনি 1 টি পরিবর্তন. গ ফাইল.
আপনি কেবল যে 1. গ ফাইল এবং তারপর পুনরায় লিঙ্ক অন্যথায় সবকিছু recompile প্রয়োজন,
সবকিছু একসাথে ফিরে লিঙ্ক.
[ছাত্রদের] যখন আমরা lcs50 লিখুন লিঙ্ক করছেন?
হ্যাঁ, তাই lcs50. যে linker যাও পতাকা সংকেত যে আপনি যে লিঙ্ক লাইব্রেরি করা উচিত.
প্রশ্ন?
আমরা যে বাইনারি প্রথম বক্তৃতায় 5 যাও ছাড়া অন্য উপর চলে গেছে?
আমি ঠিক তা মনে করি না.
আপনি সমস্ত বড় Os যে আমরা উপর চলে গেছে করেছি জানা উচিত,
এবং আপনি পারবেন, যদি আমরা দিয়েছিলেন একটি ফাংশন আপনার উচিত,
আপনি কি এটা বড় হে মোটামুটিভাবে, বলতে সক্ষম হওয়া উচিত. বা ভাল, বড় হে রুক্ষ হয়.
তাই আপনি যদি জিনিষ একই সংখ্যার উপর looping loops নেস্টেড জন্য দেখুন,
ভালো int তোমার, তোমার <n; int-ঞ, ঞ > [ছাত্রদের] n ছক. >> এটা n ছক হতে থাকে.
যদি আপনি ট্রিপল নেস্টেড আছে, তা n ঘনাংকিত হতে থাকে.
তাই আর যে সাজানোর আপনি আউট অবিলম্বে নির্দেশ করতে সক্ষম হওয়া উচিত.
আপনি সন্নিবেশ এবং সাজানোর বুদ্বুদ সাজানোর এবং জানা সাজানোর এবং যারা সব মার্জ প্রয়োজন.
এটি সহজ বুঝতে কেন তারা যারা n বর্গ এবং n log n এবং যে সকল
কারণ আমি মনে একটি ব্যঙ্গ এক বছরের যেখানে মূলত আমরা আপনার দেওয়া আছে
বুদ্বুদ ধরণের একটি বাস্তবায়ন এবং বলেন, "কি এই ফাংশন চলমান সময়?"
তাই আপনি যদি বুদ্বুদ সাজানোর হিসাবে এটা স্বীকার করে, তাহলে আপনি অবিলম্বে বলতে হবে স্কয়ার্ড পারেন.
তবে আপনি যদি এটা তাকান, আপনি কি এটিকে এর বুদ্বুদ সাজানোর বুঝতে প্রয়োজন না;
আপনি শুধু বলতে পারেন এই এই এবং এই করছে. এই ছক n হল.
[ছাত্রদের] কোন শক্ত উদাহরণ আপনার সাথে আসা আপ করতে পারেন,
ভালো একটি figuring আউট একই ধারণা?
>> আমি আমরা কোনো শক্ত উদাহরণ দিতে চাই না.
বুদ্বুদ সাজানোর বিষয় সম্পর্কে হিসাবে শক্ত হিসাবে আমরা যেতে চাই,
এমনকি, যতদিন আপনি বোঝেন যে আপনি অ্যারের উপর iterating করছি
অ্যারের মধ্যে প্রতিটি উপাদান জন্য, যা কিছু যে স্কয়ার্ড n এর হবে.
সাধারণ ঠিক মত প্রশ্ন, আমরা আছে - ওহ.
শুধু অন্যান্য দিন, ডগ দাবি, "আমি একটি অ্যালগরিদম যে একটি অ্যারের সাজাতে পারেন উদ্ভাবিত আছে
"হে (লগ ঢ) সময়! মধ্যে সংখ্যা n"
তাই কিভাবে আমরা যে অসম্ভব জানি?
[শ্রবণাতীত ছাত্র প্রতিক্রিয়া] >> হ্যাঁ.
অন্ততপক্ষে, আপনি অ্যারের প্রতিটি উপাদান স্পর্শ আছে,
তাই এটার একটা সুবিন্যস্ত বাছাই অসম্ভব -
যদি পাঁচমিশালী ক্রম সবকিছু হয়, তাহলে অ্যারের মধ্যে সবকিছু স্পর্শ করা যাচ্ছেন,
তাই যাও n হে কম সময়ে এটা অসম্ভব.
[ছাত্রদের] আপনি দেখিয়েছেন n হে হচ্ছে তা সক্ষম যে উদাহরণ আমাদের
যদি আপনি মেমরি ব্যবহার অনেক. >> হ্যাঁ.
এবং that's - আমি ভুলে গেলে কি that's - এটি বাছাই করা হয় বেড়ে চলেছে?
হুম. যে একটি পূর্ণসংখ্যা বাছাই এলগরিদম.
আমি এই জন্য বিশেষ নামের জন্য যে আমি গত সপ্তাহে মনে করতে পারে খুঁজছিলাম.
হাঁ. এই প্রকারের হয় যে বড় ধরনের হে n এ জিনিষ উদ্যাপন করা যাবে.
কিন্তু সীমাবদ্ধতা আছে, যেমন শুধুমাত্র আপনি ব্যবহার পূর্ণসংখ্যার একটি নির্দিষ্ট সংখ্যক যাও আপ করতে পারেন.
প্লাস যদি আপনি কিছু that's বাছাই করার চেষ্টা করছেন -
যদি আপনার অ্যারের হয় 012, -12, 151, 4 মিলিয়ন,
তারপর যে একক উপাদান সম্পূর্ণভাবে সমগ্র বাছাই নিকুচি করা যাচ্ছে.
>> প্রশ্ন?
[ছাত্রদের] যদি আপনি একটি recursive ফাংশন আছে এবং এটি মাত্র recursive কল করে
একটি ফিরতি বিবৃতি মধ্যে, যে লেঙ্গুড় recursive,
এবং যাতে রানটাইম সময় না আরো মেমরি ব্যবহার
অথবা এটি তুলনীয় মেমরি অন্তত হিসাবে একটি সমাধান পুনরাবৃত্ত ব্যবহার করেন?
[Bowden] হ্যাঁ.
এটা সম্ভবত কিছুটা মন্থর হবে, কিন্তু সত্যিই হবে না.
লেঙ্গুড় recursive বেশ ভাল.
স্ট্যাকের ফ্রেম এ আবার দেখার জন্যে, আসুন আমরা বলতে আছে প্রধান
এবং আমরা int-বার (int x) বা কিছু আছে.
এই হল, কিন্তু একটি নিখুঁত recursive ফাংশন না ফিরতি বার (এক্স - 1).
তাই স্বাভাবিকভাবেই, এই দ্বিধান্বিত. আপনি বেস ক্ষেত্রে এবং পণ্যদ্রব্য প্রয়োজন.
কিন্তু এখানে ধারণা হয় যে এই লেঙ্গুড় recursive,
যা যখন প্রধান কল বার এটি সংশ্লিষ্ট স্ট্যাকের ফ্রেম করবে মানে.
এই স্ট্যাকের ফ্রেম ইন যাচ্ছে একটি মেমরি সামান্য ব্লক করা আছে এর
যে যুক্তি x এর অনুরূপ.
এবং তাই এর যাক বলে যাও প্রধান বার (100) কল ঘটবে;
তাই x 100 হিসাবে যাত্রা শুরু করতে যাচ্ছে.
যদি কম্পাইলার স্বীকার করে যে এই একটি লেঙ্গুড় recursive ফাংশন,
তারপর যখন তার recursive বার বার কল করে তোলে,
পরিবর্তে একটি নতুন স্ট্যাকের ফ্রেম, যা যেখানে মূলত স্ট্যাকের ক্রমবর্ধমান শুরু করে,
শেষ পর্যন্ত গাদা করে এবং তারপর আপনি segfaults পেতে চালানো হবে
কারণ মেমরি আরম্ভ colliding.
>> সুতরাং পরিবর্তে নিজস্ব স্ট্যাকের ফ্রেম তৈরি, এটা বুঝতে পারেন,
হেই, আমি এই স্ট্যাকের ফ্রেম ফিরে আসা সত্যিই প্রয়োজন হবে না,
তাই আমি 99 এর সাথে এই আর্গুমেন্টটি প্রতিস্থাপন করুন এবং তারপরে বার সব শুরু.
এবং তারপর এটা আবার কি এবং এটি ফিরতি বার পৌঁছাতে হবে (এক্স - 1),
এবং পরিবর্তে একটি নতুন স্ট্যাকের ফ্রেম করার জন্য, এটা 98 এর সাথে তার বর্তমান যুক্তি প্রতিস্থাপন করবে
এবং তারপর ফিরে বার খুব শুরুতে ঝাঁপ.
যারা অপারেশন, যে স্ট্যাকের উপর 1 মান পরিবর্তন এবং শুরুতে ফিরে জাম্পিং,
হয় চমত্কার দক্ষ.
তাই না শুধুমাত্র এই একটি পৃথক একই ফাংশন হিসাবে ব্যবহৃত মেমরির মাপ যা পুনরাবৃত্ত হয়
কারণ শুধুমাত্র আপনার 1 স্ট্যাকের ফ্রেম ব্যবহার করছেন, কিন্তু আপনি downsides সহন করছি না
এর ফাংশন কল হচ্ছে.
কলিং ফাংশন কিছুটা ব্যয়বহুল কারণ এই সব সেটআপ করতে হয়েছে হতে পারে
এবং teardown এবং এই সব উপাদান.
তাই এই লেঙ্গুড় recursion ভাল.
[ছাত্রদের] কেন এটা নতুন পদক্ষেপ তৈরি না?
কারণ এটা বুঝতে এটা করার দরকার নেই.
বার কল ঠিক হয় recursive কল ফিরে.
সুতরাং ফিরতি মূল্য সঙ্গে কিছু করতে না প্রয়োজন.
এটা ঠিক এর সঙ্গে সঙ্গে এটি ফেরত যাচ্ছে.
তাই এটা তার নিজস্ব যুক্তি এবং প্রতিস্থাপন শুরু হতেই থাকবে.
এবং এছাড়াও, যদি আপনি লেঙ্গুড় recursive সংস্করণ আছে না,
তারপর আপনি এই সমস্ত বার যেখানে যখন এই বার ফেরত্ পাবেন
এটি এক তার মান, তারপর ফিরে যে অবিলম্বে বার ফেরৎ আছে
এবং এটি এই এক তার মূল্য ফেরৎ তারপর, এটা সঙ্গে সঙ্গে ফিরে যাচ্ছে
এবং এই এক তার মান ফেরত.
সুতরাং আপনি এই পপিং স্ট্যাকের এইসব জিনিস সব বন্ধ সংরক্ষণ করছেন
যেহেতু মাত্র ফিরতি মূল্য যাচ্ছে ফিরে সমস্ত উপায় পাস আপ করা হবে যেকোন উপায়ে.
তাই কেন আপডেট আর্গুমেন্টের সাথে আমাদের যুক্তি না এবং প্রতিস্থাপন শুরু?
যদি ফাংশন হয়, যদি আপনি ভালো কিছু করতে লেঙ্গুড় recursive না -
[ছাত্রদের] যদি বার (x + 1 টি). >> হ্যাঁ.
>> তাই আপনি যদি শর্ত দেন, তাহলে আপনি ফিরতি মূল্য সাথে কিছু করছি.
অথবা এমনকি যদি আপনি ফিরে না * 2 বার (এক্স - 1).
তাই এখন দণ্ড (এক্স - 1) ক্রম ফিরে যাও জন্য এটি প্রয়োজন 2 বার যে মান গণনা করতে,
তাই এখন এটা নিজস্ব পৃথক স্ট্যাকের ফ্রেম প্রয়োজন নেই,
এবং এখন, সেটা ব্যাপার নয় আপনি হার্ড চেষ্টা করার জন্য, আপনাকে প্রয়োজন চলুন -
এটি recursive লেঙ্গুড় না.
[ছাত্রদের] আমি একটা recursion একটি লেঙ্গুড় recursion জন্য তাগ আনতে চেষ্টা চান -
[Bowden] একটি আদর্শ বিশ্বের CS50 মধ্যে, কিন্তু আপনাকে করতে হবে না.
যাতে লেঙ্গুড় recursion পেতে সাধারণত, আপনি একটি অতিরিক্ত সেট আপ যুক্তি
যেখানে y বারের মধ্যে int x নিতে হবে
এবং y চরম জিনিস আপনি ফিরে চান অনুরূপ.
(- 1 x), 2 * y তখন আপনি এই বার ফিরে করা চলুন.
যাতে মাত্র একটি উচ্চ পর্যায়ের কিভাবে আপনি জিনিষ লেঙ্গুড় recursive হতে রুপান্তর.
কিন্তু অতিরিক্ত যুক্তি -
শেষ পর্যন্ত, এবং তারপর যখন আপনি আপনার বেস পৌঁছানোর ক্ষেত্রে, আপনি শুধু y প্রত্যাবর্তন
কারণ আপনি ফিরতি মূল্য চান সেটি সঁচায়ক করছি পুরো সময়.
আপনাকে ধরনের তা iteratively করছেন কিন্তু recursive কলগুলি ব্যবহার করে.
প্রশ্ন?
হয়তো পয়েন্টার এরিথমেটিক সম্পর্কে যখন স্ট্রিং ব্যবহার করে ভালো [ছাত্রদের],. >> শিওর.
পয়েন্টার পাটিগণিত.
যখন স্ট্রিং ব্যবহার করে এটা করা সহজ কারণ স্ট্রিং গৃহস্থালির কাজ হল বড়,
টুকিটাকি কাজ হয় চিরকালের জন্য এবং সবসময় একটি একক বাইট,
এবং তাই পয়েন্টার এরিথমেটিক সমতূল্য নিয়মিত গাণিতিক যখন আপনি স্ট্রিং সঙ্গে আচরণ করছি.
চলুন শুরু করা যাক ঠিক গৃহস্থালি * গুলি = "হ্যালো" বলে.
তাই আমরা যা মেমরির মধ্যে একটি ব্লক আছে.
এটি 6 বাইট প্রয়োজন কারণ সবসময় আপনি নাল টারমিনেটর প্রয়োজন.
এবং গৃহস্থালির কাজ * গুলি এই অ্যারে শুরুর দিকে নির্দেশ করে যাচ্ছে.
সুতরাং গুলি আছে পয়েন্ট.
এখন, এই হল মূলত কিভাবে অ্যারে কোনো কাজ করে,
নির্বিশেষে এটি ছিল malloc দ্বারা বা সেটি স্ট্যাকের উপর এর একটি রিটার্ন.
কোন অ্যারের মূলত অ্যারের শুরুর একটি পয়েন্টার,
এবং তারপর কোনো অ্যারে অপারেশন, কোনো ইন্ডেক্স, শুধু যে অ্যারের মধ্যে যাচ্ছে একটি নির্দিষ্ট অফসেট.
>> সুতরাং যখন আমি গুলি [3] ভালো কিছু বলুন; এই গুলি যাও যাচ্ছে ইন 3 অক্ষর গণনা করা হয়
সুতরাং গুলি [3], আমরা আছে 0, 1, 2, 3, যাতে গুলি [3] এই ঠ পড়ুন যাচ্ছে.
[ছাত্রদের] আমরা গুলি + 3 করছেন এবং তারপর প্রথম বন্ধনী তারকা দ্বারা একই মান পৌঁছাতে পারে?
হ্যাঁ.
এটি সমতূল্য * (গুলি + 3) যাও;
এবং যে চিরকালের জন্য এবং সবসময় সমতুল্য কোন ব্যাপার আপনি কি করবেন.
আপনি বন্ধনী সিনট্যাক্স ব্যবহার করার প্রয়োজন নেই.
আপনি সবসময় * (গুলি + 3) সিনট্যাক্স ব্যবহার করতে পারেন.
মানুষ বন্ধনী সিনট্যাক্স চান ঝোঁক যদিও,.
[ছাত্রদের] সুতরাং সব অ্যারে আসলে ঠিক পয়েন্টার দেয়া হল.
সামান্য পার্থক্য এখন পর্যন্ত যখন আমি বলতে int-x [4]; >> [ছাত্রদের] কি যে স্মৃতি তৈরি?
[Bowden] যে স্ট্যাক 4 ints নির্মাণ, তাই 16 বাইট সামগ্রিক যাচ্ছে.
এটি স্ট্যাক 16 বাইট তৈরি করে যাচ্ছে.
এক্স কোথাও সঞ্চিত হয় না.
এটা শুধু একটি চিহ্ন উল্লেখ জিনিস আরম্ভ.
কারণ আপনি এই ফাংশন ভিতরে অ্যারের ঘোষণা,
কম্পাইলার কি করতে হবে ঠিক করা হয় পরিবর্তনশীল x সমস্ত উদাহরণ প্রতিস্থাপন করুন
সঙ্গে যেখানে এটি যাও এইসব 16 বাইট করা চয়ন ঘটেছে.
এটা গৃহস্থালি * s-এর সাথে যে না কারণ গুলি হল একটি প্রকৃত পয়েন্টার পারেন.
এটা তারপর অন্যান্য জিনিষ নির্দেশ বিনামূল্যে.
x এর একটি ধ্রুবক. আপনি এটি একটি ভিন্ন অ্যারের বিন্দু নাও থাকতে পারে. >> [ছাত্রদের] ঠিক আছে.
কিন্তু এই ধারণা, এই ইন্ডেক্স, একই নির্বিশেষে যে এটা একটা গতানুগতিক অ্যারে
বা যদি বা কিছু যদি একটি পয়েন্টার এটি একটি malloced অ্যারের একটি পয়েন্টার.
এবং বস্তুত, এটা তাই সমতুল্য যে একই জিনিস.
এটা আসলে অনুবাদ বন্ধনী ভেতরে কী আছে এবং কি বন্ধনী এর জন্য ফেলে রাখা,
তাদের যোগ করা একসাথে, এবং dereferences.
সুতরাং এই একটা হিসাবে হিসাবে বৈধ * (গুলি + 3) বা গুলি [3].
[ছাত্রদের] প্রতি নির্দেশ 2-মাত্রিক অ্যারে যাও পয়েন্টার আপনি দিবেন?
>> এটা কঠিন. প্রথাগতভাবে, কোন.
একটি 2-মাত্রিক অ্যারের শুধুমাত্র একটি কিছু সুবিধাজনক সিনট্যাক্স সঙ্গে 1-মাত্রিক অ্যারে
কারণ যখন আমি বলতে int-x [3] [3], এই সত্যিই ঠিক 9 মান 1 অ্যারে.
এবং যখন আমি সূচক, কম্পাইলার জানে আমি বলতে চাচ্ছি.
যদি আমি বলতে x [1] [2], জানেন আমি দ্বিতীয় সারিতে যেতে চান, তাই এটি প্রথম 3 লাফালাফি করা হচ্ছে,
এবং তারপর এটি দ্বিতীয় ব্যাপার যে, সুতরাং এই এক করবে চায়.
কিন্তু এটি এখনও কেবলমাত্র একটি ত্রিমাত্রিক অ্যারে.
এবং তাই যদি আমি যে অ্যারের একটি পয়েন্টার দায়িত্ব অর্পণ করা চেয়েছিলেন,
; আমি int-* পি = x বলতে হবে
x এর ধরণ শুধুমাত্র -
এটা মোটামুটি x এর বলছে টাইপ যেহেতু এটা একটি চিহ্ন এবং এটি একটি প্রকৃত পরিবর্তনশীল এর হইনি,
কিন্তু এটি শুধুমাত্র একটি int-*.
x এর শুধুমাত্র এই আরম্ভ একটি পয়েন্টার. >> [ছাত্রদের] ঠিক আছে.
এবং আমি [1] [2] অ্যাক্সেস করতে পারবে না.
আমি মনে হয় পয়েন্টার ঘোষণা করার জন্য আছে বিশেষ সিনট্যাক্স,
কিছু int মত হাস্যকর (* পি [-. কিছু একেবারে হাস্যকর এমনকি আমি জানি না.
কিন্তু সঙ্গে বন্ধনী ও জিনিষ মত পয়েন্টার প্রকাশক জন্য একটি বাক্য গঠন হয়.
এমনকি এটি আপনাকে তা করতে না পারে.
আমি যে কিছু সত্য সম্পর্কে জানিয়ে দেবে তাকান ফিরে যায়নি.
আমি পরে এটি জন্য, চেহারা যদি পয়েন্টের জন্য একটি বাক্য গঠন করা হয়. কিন্তু আপনি কি এটা কখনই দেখতে হবে.
এমনকি সিনট্যাক্স এত প্রাচীন যে যদি আপনি এটি ব্যবহার করেন, মানুষের baffled করা হবে না.
বহুমাত্রিক অ্যারে হয় চমত্কার বিরল হিসাবে এটা.
আপনি প্রায় কাছাকাছি -
হ্যাঁ, যদি আপনি ম্যাট্রিক্স জিনিসগুলি করছি এটা দুর্লভ যাচ্ছে না,
কিন্তু C মধ্যে খুব কমই আপনি চলুন যাও বহুমাত্রিক অ্যারে ব্যবহার করা হবে.
হাঁ. >> [ছাত্রদের] এর যাক বলতে আপনি সত্যিই একটি দীর্ঘ অ্যারে আছে.
>> তাই ভার্চুয়াল মেমরির মধ্যে এটি সমস্ত ক্রমিক প্রদর্শিত হতে হবে,
ভালো উপাদান একে অপরের ডান পাশে,
কিন্তু প্রকৃত মেমরি, এটি করা সম্ভব জন্য যে বিভক্ত করা পর্যন্ত হবে? >> হ্যাঁ.
কিভাবে ভার্চুয়াল মেমরি কাজ শুধুমাত্র এটি আলাদা -
বরাদ্দকরণ একক একটি পাতা, যা 4 কিলোবাইট হতে থাকে,
এবং যখন একটি প্রক্রিয়া বলে, মনে হয়, আমার এই মেমরি ব্যবহার করতে চান,
অপারেটিং সিস্টেমের জন্য এটি যে মেমরি একটু 4 কিলোবাইট ব্লকের জন্য বরাদ্দ করা হবে.
এমনকি যদি আপনি কেবল একটি মেমরির সম্পূর্ণ ব্লক সামান্য বাইট ব্যবহার,
অপারেটিং সিস্টেমের জন্য এটি পূর্ণ 4 কিলোবাইট দিতে হবে.
এই হল আমার স্ট্যাকের বলে স্বীকার করে - তাই এই উপায় হল আমি থাকতে পারে.
এই স্ট্যাকের মধ্যে বিভক্ত করা যায়নি. আমার স্ট্যাকের মেগাবাইট এবং মেগাবাইটে চিহ্নিত হতে পারে.
আমার স্ট্যাকের বিশাল হতে পারে.
কিন্তু স্ট্যাকের নিজেই রয়েছে বিভিন্ন পৃষ্ঠা বিভক্ত করা হবে,
এই হল আমাদের RAM-র যা বলতে যদি আমরা এখানে এর উপর যাক,
যদি আমি উপস্থিত RAM-র 2 গিগাবাইট আছে, এই হল আমার প্রকৃত RAM-র zeroth বাইট ভালো ঠিকানা 0,
এবং এই সমস্ত উপায় 2 গিগাবাইট এখানে নিচে.
তাই এই পাতা এই ব্লক এখানে উপর মিলা পারে.
এই পাতা এই ব্লক এখানে উপর মিলা পারে.
এই এক বছরের এখানে এই এক সঙ্গে সঙ্গতিপূর্ণ হতে পারে.
তাই অপারেটিং সিস্টেম, প্রকৃত মেমরি বরাদ্দ বিনামূল্যে
কোন ব্যক্তি ইচ্ছামত পাতা.
এবং তার মানে তাদের যদি এই সীমানা অতিক্রম করে যায় একটি অ্যারের ঘটবে,
একটি অ্যারের ঘটে এই জন্য ফেলে রাখা হবে এবং একটি পৃষ্ঠা এই আদেশ অধিকার,
তারপর যে অ্যারের প্রকৃত মেমরি বিভক্ত করা হবে.
এবং তারপর যখন আপনি প্রোগ্রাম প্রস্থান করার জন্য, যখন প্রসেস শেষ হয়,
এই ম্যাপিং পেতে মুছে ফেলা এবং তারপর এটা এইসব অন্যান্য জিনিসের জন্য সামান্য ব্লকগুলি ব্যবহার বিনামূল্যে.
আরো প্রশ্ন?
[ছাত্রদের] পয়েন্টার এরিথমেটিক. >> ওহ হ্যাঁ.
স্ট্রিং ছিল সহজ, কিন্তু ints মত দিকে তাকিয়ে আছে,
তাই ফিরে যাও int-x [4];
কিনা এই একটি অ্যারে বা এটি একটি পূর্ণসংখ্যার 4 র malloced অ্যারের একটি পয়েন্টার,
এটি একই ভাবে চিকিত্সা করা হচ্ছে.
[ছাত্রদের] সুতরাং অ্যারে গাদা হয়?
[Bowden] অ্যারেগুলির গাদা হয় না. >> [ছাত্রদের] ওহ.
>> [Bowden] অ্যারের এই ধরনের স্ট্যাক করা tends
যদি আপনি এটি ঘোষিত - গ্লোবাল ভেরিয়েবল উপেক্ষা. কি গ্লোবাল ভেরিয়েবল ব্যবহার করবেন না.
ভিতর একটি ফাংশন আমি বলতে int-x [4];
এই অ্যারের জন্য একটি স্ট্যাক 4-পূর্ণসংখ্যা ব্লক তৈরি করে যাচ্ছে.
কিন্তু এই malloc (4 * sizeof (int-)); গাদা যেতে হবে.
কিন্তু এই বিন্দু পরে আমি প্রায় কাছাকাছি একই উপায়ে এবং এক্স পি ব্যবহার করতে পারেন,
ব্যতিক্রম আমি আগে আপনাকে পি reassign পারেন ছাড়া অন্য.
টেকনিক্যালি, তাদের মাপ হয় কিছুটা আলাদা, কিন্তু যে সম্পূর্ণ অপ্রাসঙ্গিক.
আপনি আসলে তাদের মাপ ব্যবহার না.
আমি বলতে পারে পি পি [3] = 2; বা x [3] = 2;
আপনি ঠিক একই উপায়ে তাদের ব্যবহার করতে পারেন.
সুতরাং পয়েন্টার এখন পাটিগণিত - হ্যাঁ.
[ছাত্রদের] আপনি কি পি * আপনি যদি বন্ধনী আছে কি না?
বন্ধনী একটি অন্তর্নিহিত dereference. >> ঠিক আছে.
বাস্তবিক এছাড়াও, আপনার সাথে কি বলছে তা বহুমাত্রিক অ্যারে আপনি পেতে পারেন
পয়েন্টার সাথে, কি কি করতে পারবেন হয় ভালো কিছু, এর কথা বলা যাক, int-** পিপি = malloc (sizeof (int-*) * 5);
আমি শুধু লিখে রেখে সব আউট করব.
আমি যে এক বার করতে চান না.
ঠিক আছে.
আমি কি এখানে কি হয় - যে পিপি [i] উচিত.
সুতরাং পিপি একটি পয়েন্টার একটি পয়েন্টার.
আপনি 5 int বড় একটি অ্যারের নির্দেশ পিপি mallocing করছি.
তাই মেমরি আপনাকে স্ট্যাকের পিপি আছে
এটি 5 ব্লক যা সব নিজেদের পয়েন্টার একটি অ্যারের দিকে নির্দেশ করছে.
এবং তারপর যখন আমি malloc এখানে নিচে, আমি malloc যে ঐ ব্যক্তি পয়েন্টার প্রতিটি
এক গাদা 4 বাইট পৃথক ব্লক নির্দেশ করা উচিত.
তাই 4 বাইটের এই পয়েন্ট.
এবং এই একটি ভিন্ন 4 বাইটের এক পয়েন্ট.
>> এবং তাদের সব তাদের নিজস্ব 4 বাইট দিকে নির্দেশ করে.
এই দেয় বহুমাত্রিক জিনিসগুলি একটি উপায় সম্পর্কে.
আমি পিপি [3] [4], কিন্তু এখন এই একই জিনিস নয় হিসাবে বহুমাত্রিক অ্যারে বলতে পারে
কারণ বহুমাত্রিক অ্যারে এটি অনুবাদ [3] [4] মধ্যে একটি একক x অ্যারের মধ্যে অফসেট.
এই dereferences পি, তৃতীয় সূচক ব্যবহারের তারপর, যে dereferences
এবং accesses - 4 অবৈধ হবে - দ্বিতীয় সূচক.
যেহেতু আমরা যখন ছিল int-x [3] [4] আগে হিসাবে একটি বহুমাত্রিক অ্যারের
এবং যখন আপনি বন্ধনী দুবার এটি সত্যিই শুধুমাত্র একটি একক dereference,
আপনি একটি একক পয়েন্টার অনুসরণ করছেন এবং তারপর একটি অফসেট,
এই সত্যিই 2D রেফারেন্স.
আপনি 2 পৃথক পয়েন্টার অনুসরণ.
তাই এই টেকনিক্যালি সাহায্যে বহুমাত্রিক অ্যারে আছে
যেখানে প্রতিটি অ্যারের হয় বিভিন্ন আকারের.
তাই আমি মনে করি খাঁজকাটা বহুমাত্রিক অ্যারে কি বলা এর
যেহেতু সত্যিই প্রথম জিনিস কিছু উপাদান আছে যে 10 র দিকে নির্দেশ করতে পারে,
দ্বিতীয় জিনিষ যা 100 উপাদান আছে নির্দেশ করতে পারে.
[ছাত্রদের] সেখানে পয়েন্টার আপনি থাকতে পারে সংখ্যাটির কোনো সীমা
প্রতি নির্দেশ অন্যান্য পয়েন্টার যাও? >> নং
আপনি int-***** পি থাকতে পারে.
পিছনে যাও পয়েন্টার এরিথমেটিক - >> [ছাত্রদের] ওহ. >> হ্যাঁ.
[ছাত্রদের] যদি আমি int-*** পি আছে এবং তারপর আমি একটি dereferencing না এবং আমি বলতে পি * সমান এই মান,
এটি শুধুমাত্র dereferencing 1 স্তর যাচ্ছে না? >> হ্যাঁ.
সুতরাং যদি আমি সেই যে শেষ পয়েন্টার নির্দেশ করা হয় অ্যাক্সেস করতে চান -
তারপর আপনি *** পি না. >> ঠিক আছে.
তাই এই হল 1 ব্লক, পয়েন্ট আরেকটি ব্লক করা, অন্য একটি পয়েন্ট ব্লক যাও যাও পি পয়েন্ট.
তারপর যদি আপনি * কাজ পি = অন্য কিছু, তাহলে এই পরিবর্তনের সময়
যাও এখন একটি ভিন্ন ব্লক দিকে নির্দেশ করে. >> ঠিক আছে.
>> [Bowden] যদি এইসব malloced হয়, তাহলে আপনি এখন মেমরি আছে অবাঞ্ছিতভাবে
যদি না আপনি এইসব বিভিন্ন রেফারেন্স আছে ঘটতে
যেহেতু আপনি বেশী যারা ফিরে পেতে পারে না যে আপনি দূরে ছুড়ে ফেলে.
পয়েন্টার পাটিগণিত.
int-x [4]; যাও 4 পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস বরাদ্দ করা যাচ্ছে না
যেখানে এক্স অ্যারের শুরুর দিকে নির্দেশ করে যাচ্ছে.
সুতরাং যখন আমি x [1] ভালো কিছু বলুন; আমি এটি অ্যারের মধ্যে দ্বিতীয় পূর্ণসংখ্যা যেতে চাওয়ার কথা বলছেন করতে চান,
যা এই এক হতে হবে.
কিন্তু সত্যিই, যে অ্যারের মধ্যে এর 4 বাইট থেকে এই পূর্ণসংখ্যা লাগে 4 বাইট আপ.
তাই সত্যিই একটি 1 অফসেট করার মানে হল 1 অফসেট
যাই হোক না কেন বার অ্যারের ধরনের মাপ.
এটি পূর্ণসংখ্যার একটি শ্রেণীবিন্যাস, তাই এটি যাও int-1 বার আকার জানে না হলে তা অফসেট চায়.
অন্যান্য সিনট্যাক্স. মনে রাখবেন যে এই সমতূল্য * (x + 1);
যখন আমি + 1 টি, কি যে আয় হয় যে পয়েন্টার ঠিকানা সংরক্ষণ করা হয় পয়েন্টার
প্লাস 1 বার পয়েন্টার ধরণ মাপ.
তাই আপনি যদি x = ox100, তাহলে x + 1 = ox104.
এবং আপনি এই অপব্যবহার এবং কিছু বলতে পারেন ভালো গৃহস্থালি * গ = (গৃহস্থালি *) x;
এবং এখন গ যাও x হিসাবে একই ঠিকানা হবে.
গ সমান ox100 হতে যাচ্ছে,
কিন্তু C + 1 সমান ox101 হতে যাচ্ছে
থেকে পয়েন্টার এরিথমেটিক পয়েন্টার ধরণ যে আপনি যুক্ত করলে উপর নির্ভর করে.
তাই সি + 1 টি, এটা গ এ দেখায়, এটা একটি গৃহস্থালি পয়েন্টার, সুতরাং গৃহস্থালির কাজ 1 বার আকার যোগ করে যাচ্ছে,
যা সর্বদা 1 হবে, যাতে আপনি 101 পেতে,
পক্ষান্তরে যদি আমি এক্স, যা এখনও 100 না, x + 1 টি যাও 104 হতে চলেছে.
[ছাত্রদের] আপনি C + + ব্যবহার করার জন্য 1 দ্বারা আপনার পয়েন্টার আগাম পারি?
হ্যাঁ, আপনি পারেন.
আপনি x এর সঙ্গে যে না কারণ এক্স শুধুমাত্র একটি প্রতীক, এটি একটি ধ্রুবক; x আপনি পরিবর্তন করতে পারবেন না.
>> কিন্তু গ শুধু একটি পয়েন্টার হতে হবে, যাতে সি + + 'পুরোপুরি বৈধ এবং এটি 1 দ্বারা বাড়াতে হবে.
যদি গ ঠিক ছিল কোন int *, তারপর গ + 104 হবে.
+ আছে পয়েন্টার এরিথমেটিক ঠিক যেমন সি + 1 টি পয়েন্টার এরিথমেটিক আছে সম্পন্ন হবে.
এটি আসলে কিভাবে একত্রীকরণ সাজানোর মত কাজ অনেক -
পরিবর্তে জিনিষ কপি তৈরি করা, এর পরিবর্তে আপনি পাস করতে পারেন -
এর কিছু নিশ্চিহ্ন করা যাক - যদি আমি অ্যারের এই অর্ধেক পাস চেয়েছিলেন যাচ্ছে.
চলুন শুরু করা যাক বলতে আমি একটা ফাংশন অ্যারের মধ্যে এই পার্শ্ব পাস চেয়েছিলেন.
যে ফাংশন কি আমি পাশ করানো যাবে?
যদি আমি এক্স প্রেরণ করার জন্য, আমি এই ঠিকানা পার করছি.
কিন্তু আমি এই বিশেষ ঠিকানা প্রেরণ করতে ইচ্ছুক. আমি কি পাস করা উচিত?
[ছাত্রদের] পয়েন্টার + 2?
[Bowden] সুতরাং x 2 +. হ্যাঁ.
যে এই ঠিকানা হতে যাচ্ছে.
এছাড়াও আপনি খুব ঘনঘন হিসাবে এটি দেখতে পাবেন x [2] এবং তারপর যে ঠিকানা.
তাহলে আপনি তা ঠিকানা কারণ বন্ধনী একটি অন্তর্নিহিত dereference গ্রহণ প্রয়োজন.
x [2] এই মান বাক্সে যা বোঝায়, এবং তারপর আপনি যে বাক্সের ঠিকানা চাই,
তাই আপনি বলতে & x [2].
যাতে এর একত্রীকরণ সাজানোর মধ্যে কিভাবে কিছু যেখানে আপনি কিছু অর্ধ তালিকা প্রেরণ করতে ইচ্ছুক
আপনি শুধু সত্যিই পাস & x [2], এবং এখন পর্যন্ত হিসাবে recursive কল উদ্বিগ্ন হয়,
আমার নতুন অ্যারে আছে আরম্ভ করা হয়.
সর্বশেষ মিনিট প্রশ্ন.
[ছাত্রদের] আমরা যদি বা না করা একটি ampersand না - কি যে হয়? >> রাশি?
[ছাত্রদের] রাশি. >> টেকনিক্যালি, dereference অপারেটর, কিন্তু আছে - >> [ছাত্রদের] Dereference.
>> যদি আমরা একটি নক্ষত্র অথবা একটি ampersand করা না, কি হবে যদি আমি বলতে y = x এবং x এর একটি পয়েন্টার?
Y ধরণ কি? >> [ছাত্রদের] আমি এটি এর পয়েন্টার 2 বলবো.
তাই যদি আপনি বলে y = x এখন, এক্স এবং ওয়াই বিন্দু একই জিনিস. >> একই জিনিস যাও [ছাত্রদের] পয়েন্ট.
এবং যদি কোন int x হল পয়েন্টার? >> কারণ এটা আপনি পয়েন্টার ধার্য করতে পারেন না অভিযোগ করে.
[ছাত্রদের] ঠিক আছে.
যে পয়েন্টার মনে রাখবেন, যদিও আমরা তীরচিহ্ন হিসাবে তাদের আঁকা,
সত্যিই তারা সব দোকান - * int-x - সত্যিই সমস্ত x সংরক্ষণকারী হয় ox100 মত,
যা আমরা প্রতি নির্দেশ ব্লক 100 সঞ্চিত যাও হিসাবে উপস্থাপিত ঘটেছে.
সুতরাং যখন আমি বলতে int-* y = x; আমি y মধ্যে করছি ox100 অনুলিপি,
যা শুধু আমরা y হিসাবে উপস্থাপিত করছি যাচ্ছে, ox100 যাও এছাড়াও প্রতি নির্দেশ.
এবং যদি আমি বলতে int i = (int) x; তারপর তোমার যাহা ox100 মান সংরক্ষণ যাচ্ছে
ভিতরে তা, এখন কিন্তু এটি পরিবর্তে একটি পয়েন্টার একটি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা যাচ্ছে.
কিন্তু আপনি ঢালাই প্রয়োজন বা অন্যথায় এটা নালিশ হবে.
[ছাত্রদের] সুতরাং আপনি নিক্ষেপ মানে না -
এটা কি চালু যাও y এর এক্স বা কাস্টিং int-এর int-ঢালাই করা হবে?
[Bowden] কি?
[ছাত্রদের] ঠিক আছে. এই প্রথম বন্ধনী পর সেখানে একটি এক্স বা Ay হতে যাচ্ছে?
>> [Bowden] হয়. x এবং y হয় সমতুল্য. >> [ছাত্রদের] ঠিক আছে.
কারণ তারা উভয় পয়েন্টার দেয়া হল. >> হ্যাঁ.
[ছাত্রদের] সুতরাং পূর্ণসংখ্যা ফর্ম হেক্সাডেসিমেল 100 সংরক্ষণ করবে? >> [Bowden] হ্যাঁ.
কিন্তু আছে. যাই হোক না কেন এটি স্থানটিকে যাও মান না
[Bowden] হ্যাঁ. >> [ছাত্রদের] সুতরাং শুধুমাত্র পূর্ণসংখ্যা ফর্ম ঠিকানা. ঠিক আছে.
[Bowden] যদি আপনি চেয়েছিলেন যাও জন্য কিছু উদ্ভট কারণে,
আপনি কেবলমাত্র পয়েন্টার সঙ্গে মোকাবিলা এবং ইন্টিজার সঙ্গে মোকাবিলা করতে পারে না
এবং শুধুমাত্র int x = 0 * ভালো হবে.
তারপর আপনি সত্যিই একবার পয়েন্টার এরিথমেটিক আরম্ভ ঘটছে বিভ্রান্ত পেতে যাচ্ছেন.
তাই সংখ্যাগুলি যে তারা সঞ্চয় হয় অর্থহীন.
এটা ঠিক কিভাবে আপনি শেষ পর্যন্ত তাদের ব্যাখ্যা.
তাই আমি কোন int * থেকে ox100 কোন int কপি বিনামূল্যে,
এবং আমি ধার্য মুক্ত - সম্ভবত যাওয়ার জন্য না ঢালাই এ yelled পেতে you're -
আমি (int-*) এই অবাধ int-* মধ্যে ox1234 ভালো কিছু দায়িত্ব অর্পণ করা বিনামূল্যে.
সুতরাং ox123 শুধুমাত্র হিসাবে হিসাবে একটি বৈধ মেমরি ঠিকানা হল & y.
& Y টিপে কিছু যে বেশ অনেক ox123 প্রত্যাবর্তন ঘটে.
[ছাত্রদের] যে সত্যিই একটি শীতল পথ থেকে হেক্সাডেসিমেল দশমিক ফর্ম যেতে চান,
যদি আপনি একটি পয়েন্টার করে এবং আপনি কোন int হিসাবে এটি নিক্ষেপ করা?
[Bowden] আপনি সত্যিই ঠিক মুদ্রণ printf মত ব্যবহার করতে পারেন.
চলুন শুরু করা যাক বলতে আমি int-y = 100 আছে.
তাই printf (% d \ n - হিসাবে ইতিমধ্যে আপনার জানা উচিত - মুদ্রণ যে হিসাবে একটি পূর্ণসংখ্যা,% x.
আমরা এটা হিসাবে হেক্সাডেসিমেল মুদ্রণ করব.
তাই একটা পয়েন্টার হেক্সাডেসিমাল হিসাবে সঞ্চিত না হয়,
এবং একটি পূর্ণসংখ্যা হিসাবে দশমিক সঞ্চিত না হয়.
বাইনারি হিসাবে সব সঞ্চিত হয়.
এটা ঠিক যে আমরা হেক্সাডেসিমাল হিসাবে পয়েন্টার প্রদর্শন ঝোঁক
কারণ আমরা এই 4 বাইট ব্লকে জিনিস মনে হয়,
এবং মেমরি ঠিকানার সাথে পরিচিত হতে থাকে.
আমরা ভালো, যদি এটি bf দিয়ে শুরু, তারপর স্ট্যাক করা হবে.
সুতরাং এটি শুধু হেক্সাডেসিমাল হিসাবে পয়েন্টার আমাদের ব্যাখ্যা.
ঠিক আছে. কোন শেষ প্রশ্ন?
>> আমি একটি বিট জন্য এখানে হতে পরে যদি আপনি অন্য কিছু করতে হবে.
এবং যে যে শেষে.
>> [ছাত্রদের] ইয়ে! [সাধুবাদ]
>> [CS50.TV]