>> [موسیقی بجانے]
>> ڈوگ لایڈ: ٹھیک ہے.
ہم integers کے ساتھ کام کیا ہے، ہم کرداروں کے ساتھ کام کیا ہے،
ہم floats کام کیا ہے، ڈبلز، ڈور، اور bools.
ہم زیادہ سے زیادہ تمام خوبصورت ختم ہو گئے ہیں [اشراوی] کی اقسام میں سے ہے کہ
ساتھ ہم سب کے لئے دستیاب کر دیا گیا ہے.
لیکن اب ہم زیادہ کچھ کرنا چاہتا ہوں.
ہم اس کس طرح کروں؟
ہم کس طرح مختلف اعداد و شمار اقسام تخلیق کروں؟
ہم ڈھانچے کا استعمال کرتے ہوئے ایسا کر سکتے ہیں.
لہذا ڈھانچے ہمیں متحد کرنے کی اجازت دیتے ہیں مختلف اقسام کی متغیر
ایک، نئے متغیر قسم میں، جو ہم اپنے قسم کا نام تفویض کر سکتے ہیں.
یہ ایک بہت مضبوط ہے بات، ایسا کرنے کے قابل ہونے کے لئے
ہم نے گروپ اب کر سکتے ہیں کیونکہ مختلف اعداد و شمار اقسام کے عناصر
ایک منطقی کنکشن ہے کہ.
ہم ایسا کرنے کے قابل ہو گیا ہے قسم کے arrays کے ساتھ، ٹھیک ہے؟
ہم کر سکتے ہیں گروپ متغیر اسی ڈیٹا کی قسم کے
ایک ساتھ مل کر ایک بڑی یونٹ میں میموری، ایک صف کی.
>> لیکن ہم اختلاط کرنے کے قابل نہیں کیا گیا ہے ایک دوسرے کے ساتھ مختلف اعداد و شمار اقسام.
ہم نے ایک عدد صحیح جوڑی، نہیں کہہ سکتا اور ایک کردار، اور ایک ڈبل تمام
ایک ہی بات میں اور ایک واحد یونٹ کو فون.
لیکن ساتھ ڈھانچے، یا اکثر، structs کے طور پر کہا جاتا ہے
ہم اصل میں کر سکتے ہیں.
تو ایک ڈھانچہ طرح ہے کی ایک سپر متغیر کی طرح.
یہ پر مشتمل ہے کہ ایک متغیر ہے اس کے اندر دوسرے متغیر.
تو یہاں کی ایک مثال ہے ایک بہت سادہ ساخت.
یہ نحو نظر آئے گا ہے ایک گاڑی کے لئے ایک ڈھانچہ بنانا چاہتے.
اب، یہاں نحو کے ذریعے جانے.
struct کے، ہے اشارہ کرتا ہے کہ مطلوبہ الفاظ کی
میں یہاں ایک نئے اعداد و شمار کی قسم پیدا کر رہا ہوں کہ.
خاص طور پر، ڈیٹا کی قسم کا نام ہے ہم دیکھیں گے کے طور پر، struct کے کار ہونے جا رہا.
لیکن اس ٹپ کی طرح ہے سنکلک کرنے کے لئے بند ہے کہ اس
متغیرات میں سے ایک گروپ کے طور پر ہے کہ جا رہا ہے اسی قسم کا حصہ سمجھا جا کرنے کے لئے
ایک منٹ میں.
>> کاریں، ساخت کا صرف نام.
ایک بار پھر، یہاں ڈیٹا کی قسم کی جا رہی ہے struct کے کار، نہ صرف گاڑی میں ہونا چاہیے.
لیکن آپ different-- ہے آپ ایک سے زیادہ structs کے تخلیق
اسی پروگرام میں، آپ کی ضرورت ہے struct اور struct کے درمیان تمیز.
تو struct کار، میں بھی ہو سکتا ہے struct طالب علم کو، مثال کے طور پر،
اسی پروگرام میں.
گھوبگھرالی منحنی خطوط وحدانی کے اندر ہیں نام نہاد شعبوں کے تمام،
یا ساخت کے ارکان.
تو چیزوں میں سے کچھ کیا ہیں ایک کار میں شامل ہیں؟
ٹھیک ہے، یہ عام طور پر، ایک سال ہے ہے ایک ماڈل کا نام، اور ایک لائسنس پلیٹ،
عام طور پر ہے کہ ایک مسافت پیما اس پر میل سے کچھ بڑی تعداد،
اور شاید ایک انجن کے سائز.
آپ دیکھ سکتے ہیں کے طور پر، میں اختلاط ہوں integers اور حروف اور ڈبلز.
وہ سب کے سب جا رہے ہیں اس نئے اعداد و شمار کی قسم کا حصہ.
>> آخر میں، آخری بات میں کرنے کی ضرورت ہے، یہ چھوٹا سا نیم وقفہ نہیں بھولنا
آخر میں.
ہم ڈھانچے کی وضاحت مکمل کرنے کے بعد، ہم آخر میں ایک نیم وقفہ ڈال کرنے کی ضرورت.
یہ ایک بہت ہی عام نحوی ہے غلطی، ایک تقریب کے ساتھ کی وجہ سے،
مثال کے طور پر، آپ کو صرف ہوگا کھلی گھوبگھرالی تسمہ، بند گھوبگھرالی منحنی خطوط وحدانی.
آپ کو ایک نیم وقفہ نہیں ڈال ایک تقریب تعریف کے اختتام.
یہ ایک تقریب کی طرح لگتا ہے تعریف، لیکن یہ نہیں ہے،
اور تو نیم وقفہ سے صرف ایک یاد دہانی ہے کہ آپ
کیونکہ وہاں ڈال کرنے کی ضرورت سنکلک دوسری صورت میں نہیں کریں گے
اس کے ساتھ کیا کرنا ہے.
یہ ایک بہت عام غلطی ہے اتفاقی طور پر بنانے کے لئے
جب آپ پہلی بار ڈھانچے کی وضاحت کر رہے ہیں.
>> ٹھیک ہے.
تو ہم عام طور پر ہمارے ڈھانچے کی وضاحت ہمارے پروگراموں کے سب سے اوپر
وہ شاید جا رہے ہیں کیونکہ ایک سے زیادہ کام کی طرف سے استعمال کیا جا کرنے کے لئے.
ہم نے ایک وضاحت کرنے کے لئے نہیں کرنا چاہتے ایک تقریب کے اندر struct،
پھر ہم only-- سکتا ہے کیونکہ ساخت کی گنجائش واقعی
صرف اس تقریب کے اندر موجود ہے.
ہم شاید ایک ڈھانچہ کی وضاحت کرنا چاہتے ہیں تو ہم ایک سے زیادہ کام میں اس کا استعمال کر سکتے ہیں،
یا شاید ایک سے زیادہ میں ایک دوسرے کے ساتھ منسلک رہے ہیں کہ فائلوں
ہماری واحد پروگرام تخلیق کرنے.
کبھی کبھی بھی اس کی بجائے ساخت کی وضاحت کی
آپ کو ڈال دیا جہاں بہت سب سے اوپر اپنے ، پونڈ بھی شامل ہے اور آپ پونڈ کی وضاحت
مثال کے طور پر، آپ کو ان میں ڈال سکتا ہے علیحدہ ڈاٹ H فائلوں، تو جس سے آپ
پونڈ خود شامل ہیں.
>> تو ہم ڈھانچے پڑے، لیکن اب ہم ان کے اندر حاصل کرنے کی ضرورت.
ہم کس طرح کے اندر ملتا ہے رسائی کے لئے ایک ڈھانچہ
ان ذیلی متغیر، ان متغیرات اس کی ساخت کے اندر موجود ہیں؟
ٹھیک ہے، ہم کچھ ہے کی اجازت دیتا ہے جس ڈاٹ آپریٹر،
ساخت کے شعبوں تک رسائی حاصل کرنے.
مثال کے طور پر تو، میں اعلان کر دیا ہے کا کہنا ہے کہ میری ساخت کا ڈیٹا کہیں ٹائپ
اپنے پروگرام کے سب سے اوپر، یا شاید میں میں پونڈ ہے کہ ایک نقطہ H فائل بھی شامل ہے.
پھر میں نے ایک نئی تخلیق کرنے کے لئے چاہتے ہیں، تو کہ اعداد و شمار کی قسم متغیر، میں، کا کہنا ہے کہ کر سکتے ہیں
struct کے گاڑی، میری گاڑی، نیم وقفہ.
میں int کہہ سکتے ہیں جیسا کہ X، یا سٹرنگ نام نیم وقفہ.
>> یہاں ڈیٹا کی قسم، struct کے کار ہے متغیر کے نام، میری گاڑی ہے
اور پھر میں نے ڈاٹ آپریٹر استعمال کر سکتے ہیں میری گاڑی کے مختلف شعبوں تک رسائی حاصل.
تو میں نے اپنے کار کہہ سکتے ہیں ڈاٹ سال 2011 کے برابر.
وہ بالکل ٹھیک ہے.
آپ کو یاد تو سال،، ایک کے طور پر بیان کیا گیا تھا اس struct گاڑی کے اندر عددی میدان
ڈیٹا کی قسم.
struct کے گاڑی اعداد و شمار کی کسی بھی متغیر قسم، اس طرح میری کار کے طور پر، میں نے اپنی گاڑی کہہ سکتے ہیں
ڈاٹ سال کے برابر ہے اور پھر تفویض یہ کچھ عددی قدر، 2011.
میری گاڑی ڈاٹ پلیٹ CS50 کے برابر ہے.
میرا کارڈ ڈاٹ مسافت پیما 50505 نیم وقفہ کے برابر ہے.
ان میں سے سب ہیں بالکل ٹھیک اور ہے
ہم تک رسائی حاصل کس طرح ساخت کے شعبوں.
تعمیرات، اگرچہ، کی ضرورت نہیں ہے اسٹیک پر پیدا کرنے کے لئے.
بس ہم، کسی دوسرے متغیر کی طرح متحرک طور پر مختص کر سکتے ہیں ان کے.
ہم ایک پروگرام ہے ہے کہ ہو سکتا ہے بہت ڈھانچے پیدا کی جائے،
ہم کس طرح بہت سے نہیں جانتے ہم ضرورت کے لئے جا رہے ہیں
تو ہم کو متحرک کرنے کی ضرورت ہے ان ڈھانچے مختص
ہمارے پروگرام کے طور پر چل رہا ہے.
اور ہم تک رسائی حاصل کرنے کے لئے جا رہے ہیں اگر ایسا ہے تو اس تناظر میں ایک ڈھانچے کے شعبوں،
ہم سب سے پہلے dereference ہے کرنے کی ضرورت ہے یاد ساخت پوائنٹر،
اور اس کے بعد ہم ایک بار dereference ہے پوائنٹر، تو ہم کھیتوں تک رسائی حاصل کر سکتے ہیں.
ہم صرف ایک ہیں، تو ساخت پوائنٹر،
ہم صرف پوائنٹر نقطہ میدان نہیں کہہ سکتا نام اور ہم کے لئے تلاش کر رہے ہیں حاصل.
محولہ لقب ضبطی کے اضافی مرحلے سے نہیں ہے.
تو کہتے ہیں کہ بجائے previous-- کے
صرف گزشتہ مثال کی طرح، اس کی بجائے اس کا اعلان
اسٹیک پر، struct کے کار، میرے کار، نیم وقفہ، میں، struct کے کار کا کہنا ہے کہ
سٹار، ایک پوائنٹر struct کے گاڑی، میری گاڑی بلایا
struct کے گاڑی کے malloc کا سائز برابر.
کتنے ہم کا سائز پتہ لگا لیں گے آپ نئے اعداد و شمار کی قسم تک لے جاتا ہے بائٹس.
آپ کو لازمی طور صرف استعمال کرنے کی ضرورت نہیں ہے چوڑائی، INT، یا چار، یا کسی بھی، کا سائز
بلٹ میں ڈیٹا کی اقسام میں سے.
سنکلک کافی ہوشیار ہے کتنے بائٹس پتہ کرنے کے لئے
اپنے نئے ڈھانچے کی طرف سے کی ضرورت ہے.
تو میں نے اپنے آپ کو میموری کا ایک یونٹ malloc سے ایک struct کار منعقد کرنے کے لئے کافی بڑا،
اور میں پیچھے ایک پوائنٹر حاصل میموری کی کہ بلاک کرنے کے لئے،
اور اس پوائنٹر میری گاڑی کو تفویض کیا جاتا ہے.
>> اب، میں تک رسائی حاصل کرنے چاہتے ہیں تو میری گاڑی کے شعبوں،
میں سب سے پہلے میری گاڑی dereference ہے استعمال کر رہے ہیں dereference آپریٹر، ستارہ
ہم اشارہ سے دیکھا ہے کہ ویڈیوز، اور پھر میں dereference ہے کے بعد،
پھر میں ڈاٹ آپریٹر استعمال کر سکتے ہیں میری گاڑی کے مختلف شعبوں تک رسائی حاصل.
سال 2011 کے برابر ڈاٹ میری گاڑی سٹار.
وہ اثر نہیں پڑے گا ہم اس معاملے میں آپ چاہتے ہیں،
ہم کو متحرک طور پر ہے کیونکہ میری گاڑی مختص.
>> یہ ٹھیک ہے، اگرچہ، اس قسم کی پریشان کن ہے؟
اب ایک 2 قدمی کے عمل نہیں ہے.
اب ہم dereference-- کرنا پڑے ہم نے ایک ستارہ آپریٹر ہے،
اور ہم ایک نقطہ آپریٹر ہے.
اور آپ توقع کر سکتے، کیونکہ سی پروگرامرز چھوٹا طریقوں سے محبت
باتیں کرنا، ایک نہیں ہے چھوٹا راستہ ایسا کرنے.
تیر نامی ایک اور آپریٹر نہیں ہے، جو اس عمل کو ایک بہت آسان بنا دیتا ہے.
تیر کام طریقہ ہے یہ سب سے پہلے dereferences کی
بائیں پر پوائنٹر آپریٹر کی طرف،
اور اس کے بعد، کے بعد dereferenced ہے بائیں پر پوائنٹر،
یہ درست میدان تک رسائی حاصل.
اور اس سے پہلے ہم نے اس طرح تھا میری کار، یہ سب چیزیں ڈاٹ سٹار
کی طرح وہاں پر جا ایک بہت تھا.
لیکن کیا ہم اس کی بجائے کر سکتے ہیں this-- ہے میری گاڑی تیر سال 2011 کے برابر.
>> ایک بار پھر، یہاں کیا ہو رہا ہے؟
سب سے پہلے، میں نے اپنی گاڑی محولہ لقب ضبطی کر رہا ہوں.
جو پھر، یہاں ایک پوائنٹر ہے.
پھر، کے بعد میں نے اپنی گاڑی dereferenced
پھر کھیتوں تک رسائی حاصل کر سکتے ہیں سال، پلیٹ، اور odometer
صرف میں کر سکتا ہوں کے طور پر پہلی ہونے سے پہلے میری گاڑی dereference کی استعمال کیا جاتا ہے ایک ستارہ،
اور میدان تک رسائی حاصل کرنے ڈاٹ.
تو تم، ڈھانچے ہو سکتا ہے ڈھانچے پر اشارہ کر سکتے ہیں،
اور آپ تک رسائی حاصل کرنے کے طریقے ہیں ان ڈھانچے کے شعبوں،
آپ کو اشارہ کرنے کے لئے ہے، چاہے ان یا متغیر خود.
ڈاٹ یا تیر، پر منحصر ہے متغیر کتنا اعلان کر دیا گیا.
میں ڈوگ لایڈ ہوں، اس CS50 ہے.