>> [সঙ্গীত বাজাচ্ছি]
>> ডগ লয়েড: ঠিক আছে.
আমরা পূর্ণসংখ্যার সঙ্গে কাজ করেছি, আমরা অক্ষরের সাথে কাজ করেছি,
আমরা floats কাজ করেছি, টেনিস, স্ট্রিং, এবং bools.
আমরা অনেক চমত্কার সব ফেলেছেন [শ্রবণাতীত] ধরনের যে
বরাবর আমাদের সব জন্য উপলব্ধ হয়েছে.
কিন্তু এখন আমরা আরো কিছু করতে চান.
আমরা যে কিভাবে করব?
কিভাবে আমরা বিভিন্ন ধরনের তথ্য তৈরি করব?
আমরা কাঠামো ব্যবহার করে তা করতে পারেন.
তাই কাঠামো আমাদের ঐক্যবদ্ধ করার অনুমতি বিভিন্ন ধরনের ভেরিয়েবল
একটি একক, নতুন পরিবর্তনশীল টাইপ মধ্যে, যা আমরা নিজস্ব প্রকার নাম ধার্য করতে পারেন.
এই সত্যিই একটি শক্তিশালী হয় জিনিস, না পাবে
আমরা গ্রুপ এখন যা করতে পারেন, কারণ বিভিন্ন ধরনের তথ্য উপাদান
একসঙ্গে একটি লজিক্যাল সংযোগ আছে.
আমরা এই কাজ করতে সক্ষম করে চলেছি সাজান অ্যারে দিয়ে, ডান?
আমরা যা করতে পারেন গ্রুপ ভেরিয়েবল একই ধরনের তথ্য
একসঙ্গে একটি বৃহৎ ইউনিট মেমরি, একটি অ্যারের.
>> কিন্তু আমরা মিশ্রিত করতে সক্ষম হয়েছে না একসাথে বিভিন্ন ধরনের তথ্য.
আমরা, একটি পূর্ণসংখ্যা পেয়ার, বলতে পারবেন না এবং একটি অক্ষর, এবং একটি ডবল সব
একই জিনিস এবং একটি একক যে কল.
কিন্তু সঙ্গে কাঠামো, বা ঘন ঘন, structs হিসাবে উল্লেখ
আমরা আসলে যা করতে পারেন.
সুতরাং একটি কাঠামো কেমন হয় একটি সুপার পরিবর্তনশীল মত.
এটা রয়েছে যে একটি পরিবর্তনশীল এটি ভেতরে অন্যান্য ভেরিয়েবল.
তাই এখানে একটি উদাহরণ একটি খুব সহজ কাঠামো.
এই সিনট্যাক্স দেখাবে কি একটি গাড়ির জন্য একটি কাঠামো তৈরী করতে চাই.
এখন, আমি কি এখানে সিনট্যাক্স দিয়ে যান.
Struct, যে ইঙ্গিত করে যে শব্দ
আমি এখানে একটি নতুন ডাটা টাইপ তৈরি করছি যে.
বিশেষ করে, ডাটা টাইপ এর নাম হিসাবে আমরা দেখতে পাবেন, struct গাড়ী হতে যাচ্ছে.
কিন্তু এই টিপ সাজানোর কম্পাইলার বন্ধ যে এই
ভেরিয়েবলের একটি দল হিসেবে যে যাচ্ছে একই ধরনের অংশ হিসেবে বিবেচনা করা
এক মিনিটে.
>> কার, কাঠামো ঠিক নাম.
আবার, এখানে ডাটা টাইপ যাচ্ছে struct গাড়ী, না শুধু গাড়ী হতে.
কিন্তু আপনি আলাদা আছে আপনি একাধিক structs তৈরি হলে
একই প্রোগ্রামে, আপনি প্রয়োজন struct এবং struct মধ্যে পার্থক্য.
সুতরাং struct গাড়ী, আমি থাকতে পারে struct ছাত্র, উদাহরণস্বরূপ,
একই প্রোগ্রামে.
কোঁকড়া ধনুর্বন্ধনী ভিতরে হয় তথাকথিত ক্ষেত্র সব,
বা কাঠামো সদস্যদের.
তাই কিছু কিছু কি হয় একটি গাড়ী সহজাত যে?
ওয়েল, এটা সাধারণত, একটি বছর আছে একটি মডেল নাম, এবং লাইসেন্স প্লেট,
সাধারণত যে একটি দূরত্বমাপণী এটি মাইল কিছু সংখ্যা,
এবং হয়তো একটি ইঞ্জিন আকার.
হিসাবে আপনি দেখতে পারেন, আমি আপ মিশ করছি ইন্টিজার এবং অক্ষর এবং দ্বিগুণ.
তারা সব হতে যাচ্ছেন এই নতুন ডাটা টাইপ অংশ.
>> সর্বশেষে, চূড়ান্ত জিনিস আমি করতে প্রয়োজন, এই সামান্য সেমিকোলন দিতে ভুলবেন না
শেষে.
আমরা গঠন সংজ্ঞা শেষ করার পর, আমরা শেষে একটি সেমিকোলন করা প্রয়োজন.
এটি একটি খুব সাধারণ সিনট্যাক্স এর ভুল, একটি ফাংশন সঙ্গে, কারণ,
উদাহরন স্বরূপ, আপনি শুধু হবে খোলা কোঁকড়া বক্রবন্ধনী, বন্ধ কোঁকড়া যুগল.
আপনি একটি সেমিকোলন করা না একটি ফাংশন সংজ্ঞা শেষে.
এটি একটি ফাংশন মত দেখায় সংজ্ঞা, কিন্তু এটা না,
এবং তাই সেমিকোলন আছে শুধু একটি অনুস্মারক যে আপনি
কারণ, সেখানে লাগাতে প্রয়োজন কম্পাইলার না অন্যথায় হবে
এটা দিয়ে কি করতে জানেন.
এটি একটি খুব সাধারণ ত্রুটি ঘটনাক্রমে করতে
যখন আপনি প্রথম কাঠামো নির্ধারণ করছেন.
>> ঠিক আছে.
যাতে আমরা সাধারণত আমাদের কাঠামো নির্ধারণ আমাদের প্রোগ্রাম খুব শীর্ষে
তারা সম্ভবত চলুন কারণ একাধিক ফাংশন দ্বারা ব্যবহার করা হবে.
আমরা একটি সংজ্ঞায়িত করতে চান না একটি ফাংশন এর ভিতরে struct,
তারপর আমরা only-- পারেন কারণ গঠন সুযোগ সত্যিই
শুধু তাই ফাংশনের ভিতর বিদ্যমান.
আমরা সম্ভবত একটি কাঠামো নির্ধারণ করতে চাই তাই আমরা একাধিক ফাংশন এটি ব্যবহার করতে পারেন,
অথবা সম্ভবত একাধিক মধ্যে একত্রে সংযুক্ত করা হয় যে ফাইল
আমাদের একক প্রোগ্রাম তৈরি করতে.
কখনও কখনও পরিবর্তে কাঠামো সংজ্ঞা
আপনি করা যেখানে খুব শীর্ষে আপনার , পাউন্ড রয়েছে এবং আপনার পাউন্ড নির্ধারণ
উদাহরন স্বরূপ, আপনি তাদের রাখা হতে পারে পৃথক ডট জ ফাইল, তারপর যা আপনি
পাউন্ড নিজেকে অন্তর্ভুক্ত.
>> সুতরাং আমরা কাঠামো আছে, কিন্তু এখন আমরা তাদের ভেতরে পেতে হবে.
কিভাবে আমরা ভেতরে পেতে পারি প্রবেশাধিকার একটি কাঠামো
ঐ সাব-ভেরিয়েবল, যারা ভেরিয়েবল যে কাঠামো ভিতরে অস্তিত্ব?
ওয়েল, আমরা কিছু বলা আছে আমাদের পারবেন যা ডট অপারেটর,
গঠন ক্ষেত্র অ্যাক্সেস করতে.
সুতরাং উদাহরণস্বরূপ, আমি ঘোষণা করেছি বলা যাক আমার কাঠামো তথ্য কোথাও টাইপ
আমার প্রোগ্রাম উপরের, অথবা সম্ভবত এ পাউন্ডেই করেছি যে একটি ডট জ ফাইল অন্তর্ভুক্ত.
আমি তখন একটি নতুন তৈরি করতে চান তাহলে যে ডাটা টাইপ পরিবর্তনশীল, আমি বলতে পারেন
struct গাড়ী, আমার গাড়ি, সেমিকোলন.
আমি int বলতে পারে, শুধু ভালো X, বা স্ট্রিং নাম সেমিকোলন.
>> এখানে ডাটা টাইপ, struct গাড়ী পরিবর্তনশীল এর নাম, আমার গাড়ী
এবং তারপর আমি ডট অপারেটর ব্যবহার করতে পারেন আমার গাড়ির বিভিন্ন ক্ষেত্র অ্যাক্সেস.
তাই আমি আমার গাড়ী বলতে পারেন বিন্দু বছর 2011 সমান.
যে পুরোপুরি সূক্ষ্ম.
আপনার যদি মনে থাকে সাল, একটি হিসাবে সংজ্ঞায়িত করা হয় এই struct গাড়ির ভিতরে পূর্ণসংখ্যা ক্ষেত্র
ডাটা টাইপ.
Struct গাড়ী তথ্য যাতে কোনো ভেরিয়েবলের টাইপ, যেমন আমার গাড়ী হিসাবে, আমি আমার গাড়ী বলতে পারেন
ডট বছরের সমান এবং তারপর ধার্য এটা কিছু পূর্ণসংখ্যা মান, 2011.
আমার গাড়ী ডট প্লেট এবং CS50 সমান.
আমার কার্ড ডট দূরত্বমাপণী 50505 সেমিকোলন সমান.
ঐ সব হয় পুরোপুরি জরিমানা এবং যে
আমরা কিভাবে ব্যবহার করবেন গঠন ক্ষেত্র.
কাঠামো, যদিও, প্রয়োজন হবে না স্ট্যাকের উপর ভিত্তি করে তৈরি করা.
শুধু আমরা, অন্য কোন চলক পছন্দ পরিবর্তনশীল তাদের বরাদ্দ করা যেতে পারে.
আমরা একটি প্রোগ্রাম থাকে যে প্রতাপ অনেক কাঠামো উৎপাদিত হবে,
আমরা কতজন জানি না আমরা, প্রয়োজন চলুন
তারপর আমরা পরিবর্তনশীল প্রয়োজন ঐ কাঠামো বরাদ্দ
আমাদের প্রোগ্রাম হিসাবে চলমান.
আর আমরা অ্যাক্সেস করতে যাচ্ছেন, তাই যদি যে প্রেক্ষাপটে একটি কাঠামো ক্ষেত্র,
আমরা প্রথম ডি-রেফারেন্স প্রয়োজন যে রিকল কাঠামো পয়েন্টার,
এবং তারপর আমরা একবার ডি-রেফারেন্স পয়েন্টার, তাহলে আমরা ক্ষেত্র অ্যাক্সেস করতে পারেন.
আমরা শুধুমাত্র একটি থাকে কাঠামো একটি পয়েন্টার,
আমরা শুধু পয়েন্টার ডট ক্ষেত্র বলতে পারবেন না নাম দিন এবং আমরা যা খুঁজছেন তা পেতে.
Dereferencing অতিরিক্ত ধাপ আছে.
সুতরাং আসুন যে বলা যাক পরিবর্তে previous-- এর
শুধু আগের উদাহরণটি, এর পরিবর্তে এটি ঘোষণা
স্ট্যাক struct, গাড়ী, আমার গাড়ী, সেমিকোলন, আমি struct গাড়ী বলতে
তারকা, একটি একটি পয়েন্টার struct গাড়ী, আমার গাড়ী বলা
struct গাড়ির malloc আকার সমান.
কতগুলি আমরা আকার চিন্তা করব আপনার নতুন ডাটা টাইপ আপ লাগে বাইট.
আপনি অগত্যা শুধুমাত্র ব্যবহার করতে হবে না প্রস্থ, কোন int, বা গৃহস্থালি, অথবা কোন, মাপ
বিল্ট ইন ডেটা ধরন.
কম্পাইলার স্মার্ট যথেষ্ট কত বাইট জিনিসটা
আপনার নতুন কাঠামো ব্যবহার করা হয়.
তাই আমি নিজেকে মেমরি ইউনিট malloc একটি struct গাড়ী রাখা যথেষ্ট বড়,
এবং আমি ফিরে একটি পয়েন্টার পাবেন মেমরি যে ব্লক করতে,
এবং যে পয়েন্টার আমার গাড়ী নির্ধারিত হয়.
>> এখন, আমি এক্সেস করতে চান তাহলে আমার গাড়ির ক্ষেত্র,
আমি প্রথম আমার গাড়ী ডি-রেফারেন্স ব্যবহার dereference অপারেটর, তারকা
আমরা পয়েন্টার থেকে দেখা করেছি যে ভিডিও, এবং তারপর আমি ডি-রেফারেন্স পরে,
তারপর আমি ডট অপারেটর ব্যবহার করতে পারেন আমার গাড়ির বিভিন্ন ক্ষেত্র অ্যাক্সেস.
বছর 2011 সমান ডট আমার গাড়ির তারকা.
যে প্রভাব হবে আমরা এই ক্ষেত্রে চান,
আমরা পরিবর্তনশীল করেছি কারণ আমার গাড়ী বরাদ্দ.
>> একেবারে ঠিক, যদিও ধরনের বিরক্তিকর?
এখন একটি 2 ধাপে প্রক্রিয়া আছে.
এখন আমরা dereference-- আছে আমরা একটি তারকা অপারেটর আছে,
এবং আমরা একটি বিন্দু অপারেটর আছে.
আর আপনি আশা করতে পারে, কারণ সি প্রোগ্রামারদের খাটো উপায়ে প্রেম
কিছু করার, একটি নেই খাটো ভাবে এই কাজ করতে.
তীর নামক আরেকটি অপারেটর নেই, যা এই প্রক্রিয়া অনেক সহজ করে তোলে.
তীর কাজ উপায় এটা প্রথম dereferences
Glosbe উপর পয়েন্টার অপারেটর পাশ,
এবং তারপর, পরে dereferenced থাকার Glosbe উপর পয়েন্টার,
এটি ডান ক্ষেত্রের ব্যবহারের.
আর তাই পূর্বে আমরা এই সাজানোর ছিল আমার গাড়ী, এই সব উপাদান ডট রাশি
মত সেখানে যাওয়া অনেক ছিল.
কিন্তু কি করব তা পরিবর্তে পারেন আপাততঃ হয় আমার গাড়ী তীর বছর 2011 সমান.
>> আবার, এখানে কি ঘটছে?
প্রথমত, আমি আমার গাড়ী dereferencing করছি.
যা আবার, এখানে একটি পয়েন্টার.
তারপর, থাকার পর আমি আমার গাড়ী dereferenced
তারপর ক্ষেত্র অ্যাক্সেস করতে পারেন বছর, প্লেট, এবং দূরত্বমাপণী
শুধু আমি পারা হিসাবে প্রথম থাকার আগে আমার গাড়ী ডি-রেফারেন্স ব্যবহৃত তারকা,
এবং ক্ষেত্র অ্যাক্সেস করতে বিন্দু.
সুতরাং আপনি কাঠামো থাকতে পারে কাঠামো পয়েন্টার থাকতে পারে,
এবং আপনি অ্যাক্সেস করার উপায় আছে যারা স্ট্রাকচার ক্ষেত্র,
আপনি পয়েন্টার আছে কিনা তাদের বা ভেরিয়েবল নিজেদের.
বিন্দু বা তীর, তার উপর নির্ভর করে পরিবর্তনশীল কিভাবে ঘোষণা করা হয়.
আমি ডগ লয়েড আছি, এই CS50.