[Powered by Google Translate] اجازه دهید بحث در مورد آرایه.
پس چرا ما همیشه مایل به استفاده از آرایه؟
خوب اجازه دهید به شما می گویند یک برنامه است که نیاز به ذخیره 5 شناسه دانشجوی.
این ممکن است به نظر می رسد معقول و منطقی به 5 متغیر جداگانه است.
برای دلایلی که ما را در یک بیت را ببینید، ما شروع به شمارش از 0.
متغیرهای ما باید id0 هوشمند، ID1 هوشمند، و غیره.
هر گونه منطق ما می خواهیم بر روی ID دانشجویی انجام خواهد شد نیاز به کپی و جا به جا
برای هر کدام از شناسه های دانشجویی.
اگر ما می خواهیم به بررسی کنید که دانش آموزان اتفاق می افتد به در CS50،
ما برای اولین بار می خواهید برای بررسی id0 نشان دهنده دانش آموز در این دوره نیاز دارند.
سپس همین کار را برای دانش آموز بعدی، ما نیاز به کپی و چسباندن کد برای id0
و به جای همه ظهور id0 ID1 و به همین ترتیب برای ID2، 3، و 4.
>> به محض این که شما می شنوید که ما نیاز به کپی و چسباندن،
شما باید شروع به فکر کردن است که یک راه حل بهتر وجود دارد.
حالا چه می شود اگر شما متوجه شما 5 شناسه دانش آموزان نیاز ندارد بلکه 7؟
شما باید به کد منبع خود را برای رفتن به عقب و اضافه کردن در ID5، id6،
و کپی کنید و از منطق برای چک کردن در صورتی که شناسه متعلق به کلاس این 2 شناسه جدید.
هیچ چیز اتصال همه این شناسه ها با یکدیگر وجود دارد، و بنابراین هیچ راهی برای درخواست وجود دارد
برنامه ای برای انجام این کار برای شناسه 0 تا 6 است.
خوب حالا شما متوجه شما 100 شناسه دانش آموز است.
آن شروع به نظر می رسد کمتر از ایده آل باید به طور جداگانه اعلام هر یک از این شناسه،
و کپی کنید و هر گونه منطق برای آن دسته از شناسه جدید.
اما شاید ما در حال تعیین می کند، و ما این کار را برای هر 100 دانش آموز است.
اما چه می شود اگر شما نمی دانید که چگونه بسیاری از دانشجویان در واقع وجود دارد؟
فقط برخی از دانشجویان N وجود دارد و برنامه خود را به درخواست کاربر چه که N است.
آه آه. این است که کار نمی کند خیلی خوب است.
برنامه شما تنها برای برخی از شماره های ثابت از دانش آموزان کار می کند.
>> حل تمام این مشکلات زیبایی از آرایه است.
پس چه شده است یک آرایه؟
در برخی از زبان های برنامه نویسی از نوع آرایه ممکن است قادر به انجام یک کمی بیشتر
اما در اینجا، ما فقط به عنوان ساختار داده ها در آرایه اصلی تمرکز شما آن را در C. را ببینید
آرایه یک بلوک بزرگ از حافظه است. همین.
هنگامی که ما می گویند که ما باید مجموعه ای از 10 عدد صحیح، که فقط معنی است که ما باید برخی از بلوک
از حافظه است که به اندازه کافی بزرگ برای نگهداری 10 عدد صحیح جداگانه است.
فرض کنید که یک عدد صحیح 4 بایت، این به این معنی است که مجموعه ای از 10 عدد صحیح
یک بلوک مداوم از 40 بایت در حافظه است.
حتی زمانی که شما با استفاده از آرایه های چند بعدی، که ما آن را نمی خواهد به اینجا بروید.
هنوز فقط یک بلوک بزرگ از حافظه است.
نماد چند بعدی است فقط یک راحتی است.
اگر شما 3 3 آرایه های چند بعدی از اعداد صحیح،
و سپس برنامه خود را واقعا فقط این کار را به عنوان یک بلوک بزرگ از 36 بایت را درمان کنند.
تعداد کل اعداد صحیح 3 بار در 3 است، و هر عدد صحیح طول می کشد تا 4 بایت است.
>> بیایید نگاهی به یک نمونه اولیه.
ما در اینجا می توانید ببینید 2 راه مختلف آرایه های اعلام.
ما باید به نظر 1 از آنها برای برنامه ای برای تدوین
از آنجایی که x به ما اعلام دو برابر است.
ما می خواهیم نگاهی به برخی از تفاوت های بین این 2 نوع اظهارات در بیت.
هر دوی این خطوط اعلان یک آرایه N اندازه،
که در آن ما # N به عنوان 10 را تعریف کنیم.
ما فقط می تواند به راحتی کاربر را برای یک عدد صحیح مثبت خواسته
و استفاده می شود که عدد صحیح را به عنوان تعدادی از عناصر در آرایه.
مانند ID دانشجوی مثال ما قبل از این نوع مانند اعلام 10 به طور کامل جدا
متغیر خیالی، x0، X1، X2، و غیره تا به xN-1.
نادیده گرفتن این خطوط که در آن ما اعلام آرایه، متوجه براکت دست نخورده
در داخل حلقه for.
وقتی ما به نوشتن چیزی شبیه به X [3]، که من فقط به عنوان براکت X 3 به عنوان خوانده شده
شما می توانید از آن فکر می کنم مانند درخواست برای X3 خیالی.
توجه داشته باشید که در مقایسه با آرایه ای از اندازه N، این بدان معنی است که در داخل براکت
کنیم که شاخص تماس بگیرید، می تواند هر چیزی باشد از 0 تا N-1،
که در مجموع شاخص های N است.
>> برای فکر کردن در مورد چگونه این در واقع کار می کند
به یاد داشته باشید که آرایه یک بلوک بزرگ از حافظه است.
فرض کنید که یک عدد صحیح 4 بایت، X آرایه کل یک بلوک 40 بایت از حافظه است.
بنابراین x0 اشاره به 4 بایت اول از بلوک.
X [1] اشاره به 4 بایت بعدی و به همین ترتیب.
این به این معنی است که از آغاز X همه برنامه همیشه نیاز به پیگیری است.
اگر شما می خواهید به استفاده از X [400]، و سپس این برنامه می داند این است که معادل
به تنها 1،600 بایت پس از آغاز X.
کجا ما 1600 کلمه در ادامه متن از؟ 400 بار 4 بایت در هر عدد صحیح است.
>> قبل از حرکت، بسیار مهم است برای تحقق بخشیدن به آن را که در C
اجرای شاخص است که ما در آرایه استفاده وجود دارد.
بلوک بزرگ ما این است که تنها 10 عدد صحیح است، اما هیچ چیز به ما داد اگر ما به نوشتن X [20]
یا حتی X [-5].
این شاخص هم ندارد یک عدد به.
این می تواند هر عبارت دلخواه.
در این برنامه ما از من متغیر استفاده از حلقه for به شاخص به آرایه.
این یک الگوی بسیار رایج است، برگرفته از i = 0 به طول آرایه،
و پس از آن من با استفاده از به عنوان شاخص آرایه.
در این روش شما به طور موثر بر روی کل آرایه حلقه،
و شما هم می توانید به هر نقطه در آرایه اختصاص و یا استفاده از آن را برای برخی از محاسبات است.
>> در اولین حلقه، من از 0 شروع می شود،
و پس از آن به نقطه 0 در آرایه، مقدار 0 بار 2 اختصاص دهید.
پس از آن من افزایش است، و ما اختصاص به نقطه اول در آرایه مقدار 1 بار 2.
پس از آن من افزایش دوباره و به همین ترتیب تا تا زمانی که ما اختصاص به موقعیت N-1 در آرایه
مقدار N-1 بار 2.
بنابراین ما ایجاد کرده اید آرایه با 10 عدد اول حتی.
شاید evens می شده اند یک نام برای متغیر کمی بهتر از X،
اما که می توانست با توجه به چیزهای دور.
دومی برای حلقه فقط چاپ ارزش است که ما در حال حاضر در داخل آرایه ذخیره می شود.
>> بیایید سعی کنید در حال اجرا برنامه با هر دو نوع از اظهارات آرایه
و نگاهی به در خروجی برنامه.
تا آنجا که ما مشاهده می کنید، رفتار این برنامه راه یکسان برای هر دو نوع از این اظهارات است.
بیایید نگاهی به آنچه اتفاق می افتد در صورتی که حلقه اول تغییر در N متوقف نمی
اما به جای 10،000 گویند.
فراتر از آرایه.
متأسفم. شاید شما دیده ام پیش از این.
گسل تقسیم بندی به معنای برنامه شما خراب شده است.
شما شروع به دیدن این مناطق از حافظه شما نباید لمس کردن لمس می کنی.
در اینجا ما در حال دست زدن به 10،000 منطقه فراتر از آغاز X،
که آشکارا یک محل در حافظه ما نباید لمس کردن است.
بنابراین بسیاری از ما احتمالا به طور تصادفی خواهد بود قرار نمی 10،000 به جای N،
اما چه می شود اگر ما چیزی بیشتر ظریف مانند نوشتن می گویند کمتر از یا برابر با N
در شرط حلقه به عنوان مخالف به کمتر از N.
به یاد داشته باشید که یک آرایه فقط شاخص از 0 تا N-1،
که بدان معنی است که شاخص N است که فراتر از آرایه.
این برنامه ممکن است سقوط در این مورد، اما هنوز هم خطا.
در واقع، این خطا است چنان شایع است که آن را تا به نام خود آن را،
خاموش توسط 1 خطا.
>> است که آن را برای اصول اولیه است.
پس چه تفاوت عمده بین 2 نوع از اظهارات آرایه؟
یکی از تفاوت این است که در آن بلوک بزرگی از حافظه می رود.
در اعلامیه اول، که من نوع براکت آرایه تماس بگیرید،
اگر چه این به هیچ وجه یک نام متعارف،
آن را بر روی پشته بروید.
در حالی که در دوم، که من از نوع اشاره گر آرایه تماس بگیرید، آن را بر روی پشته.
این به این معنی که هنگامی که بازده تابع، آرایه براکت به طور خودکار خواهد شد deallocated،
در حالی که شما را به عنوان explicitily تماس رایگان بر روی آرایه ای از اشاره گر
و یا اگر شما نشت حافظه.
علاوه بر این، آرایه براکت است که در واقع نه یک متغیر است.
این مهم است. این فقط یک نماد است.
شما می توانید از آن به عنوان یک ثابت است که کامپایلر برای شما انتخاب فکر می کنم.
این به این معنی است که ما می تواند چیزی شبیه به X + + با توجه به نوع براکت،
هر چند این کاملا معتبر با نوع اشاره گر است.
>> نوع داده اشاره گر یک متغیر است.
نوع اشاره گر، ما باید 2 بلوک مجزا از حافظه است.
متغیر x خود را در پشته ذخیره می شود و فقط یک اشاره گر است،
اما بلوک بزرگ از حافظه در پشته ذخیره می شود.
متغیر x را بر روی پشته ذخیره آدرس
از بلوک های بزرگی از حافظه در پشته.
یک مفهوم این است که با اندازه اپراتور است.
اگر شما برای اندازه آرایه براکت بخواهید، آن را به شما به اندازه بلوک های بزرگی از حافظه را،
چیزی مانند 40 کلمه در ادامه متن
اما اگر شما به اندازه از نوع اشاره گر آرایه بپرسید،
آن را به شما به اندازه متغیر x خود را، که بر روی دستگاه به احتمال زیاد فقط 4 بایت می دهد.
با استفاده از نوع اشاره گر آرایه، آن است که غیر ممکن است به طور مستقیم به درخواست
اندازه بلوک های بزرگی از حافظه است.
این امر معمولا بسیاری از محدودیت نمی باشد، از آنجایی که ما بسیار به ندرت می خواهید اندازه
بلوک بزرگی از حافظه، و ما معمولا می توانید آن را محاسبه اگر ما به آن نیاز دارند.
>> در نهایت، آرایه براکت اتفاق می افتد، ما با یک میانبر برای مقدار دهی اولیه به آرایه.
بیایید ببینید که چگونه ما می تواند اعداد صحیح از 10 اول حتی با استفاده از initilization میانبر ارسال.
با استفاده از آرایه ای از اشاره گر، یک راه برای انجام یک میانبر مانند این وجود ندارد.
این است که فقط معرفی به آنچه که شما می توانید با آرایه انجام دهید.
آنها نشان می دهد در تقریبا در هر برنامه تو می نویسم.
امیدوارم شما هم اکنون می توانید راه بهتری برای انجام این کار دانش آموز به عنوان مثال شناسه را ببینید
از آغاز از ویدئو.
>> نام من راب Bowden، و این CS50.