1 00:00:00,000 --> 00:00:06,030 >> [موسیقی] 2 00:00:06,030 --> 00:00:08,390 >> داگ لوید: اشاره گرها، در اینجا ما می باشد. 3 00:00:08,390 --> 00:00:11,080 این است که احتمالا رفتن به بود که موضوع سخت ترین 4 00:00:11,080 --> 00:00:12,840 که ما در مورد در CS50 صحبت کنید. 5 00:00:12,840 --> 00:00:15,060 و اگر شما را خوانده ام هر چیزی در مورد اشاره گر 6 00:00:15,060 --> 00:00:19,080 قبل از اینکه شما ممکن است یک کمی تهدید آمیز رفتن به این فیلم. 7 00:00:19,080 --> 00:00:21,260 این درست است که اشاره گرها آیا شما اجازه می دهد توانایی 8 00:00:21,260 --> 00:00:23,740 شاید پیچ ​​کردن بدی زمانی که شما 9 00:00:23,740 --> 00:00:27,450 کار با متغیرها، و داده ها، و ایجاد برنامه های خود را به سقوط. 10 00:00:27,450 --> 00:00:30,490 اما آنها در واقع واقعا مفید و آنها به ما یک راه بسیار خوبی اجازه می دهد 11 00:00:30,490 --> 00:00:33,340 به تصویب داده ها به عقب و بین توابع، 12 00:00:33,340 --> 00:00:35,490 که ما غیر این صورت قادر به انجام است. 13 00:00:35,490 --> 00:00:37,750 >> و بنابراین، آنچه ما واقعا در اینجا می خواهم به انجام قطار است 14 00:00:37,750 --> 00:00:41,060 شما را به نظم و انضباط اشاره گر خوب، به طوری که شما می توانید به طور موثر استفاده از اشاره گر 15 00:00:41,060 --> 00:00:43,850 به برنامه های خود را که بسیار بهتر است. 16 00:00:43,850 --> 00:00:48,220 همانطور که گفتم اشاره گر را به ما بدهید مختلف راهی برای عبور داده ها بین توابع. 17 00:00:48,220 --> 00:00:50,270 حال اگر شما از یاد ویدئو قبل، زمانی که 18 00:00:50,270 --> 00:00:53,720 صحبت کردیم دامنه متغیر، من ذکر 19 00:00:53,720 --> 00:01:00,610 که تمام داده که ما بین تصویب توابع در C است با مقدار منتقل. 20 00:01:00,610 --> 00:01:03,070 و من ممکن است استفاده کرده اند نیست که مدت، من به معنای وجود دارد 21 00:01:03,070 --> 00:01:07,170 این بود که ما در حال عبور از کپی از داده ها. 22 00:01:07,170 --> 00:01:12,252 هنگامی که ما یک متغیر تصویب به یک تابع، ما در واقع عبور از متغیر نیست 23 00:01:12,252 --> 00:01:13,210 به تابع، درست است؟ 24 00:01:13,210 --> 00:01:17,670 ما در حال عبور یک کپی از که داده به تابع. 25 00:01:17,670 --> 00:01:20,760 کارکرد به آن چه خواهد شد و آن را محاسبه برخی از ارزش، 26 00:01:20,760 --> 00:01:23,180 و شاید استفاده می کنیم که ارزش هنگامی که آن را آن را می دهد تماس. 27 00:01:23,180 --> 00:01:26,700 >> بود یک استثنا وجود دارد این قانون از عبور از با ارزش، 28 00:01:26,700 --> 00:01:31,210 و ما به آنچه که می آیند کمی بعد در این فیلم است. 29 00:01:31,210 --> 00:01:34,880 اگر ما به جای استفاده از اشاره گر از استفاده از متغیرها، 30 00:01:34,880 --> 00:01:38,180 و یا به جای استفاده از متغیرهای خود یا نسخه هایی از متغیرها، 31 00:01:38,180 --> 00:01:43,790 ما در حال حاضر می تواند عبور متغیرهای اطراف بین توابع در راه های مختلف. 32 00:01:43,790 --> 00:01:46,550 این به این معنی است که اگر ما را تغییر در یک تابع، 33 00:01:46,550 --> 00:01:49,827 که در واقع تغییر خواهد اثر در یک تابع های مختلف. 34 00:01:49,827 --> 00:01:52,160 باز هم، این چیزی است که ما نمی تواند قبلا انجام دهید، 35 00:01:52,160 --> 00:01:56,979 و اگر شما همیشه سعی کردم به مبادله ارزش دو متغیر در یک تابع، 36 00:01:56,979 --> 00:01:59,270 شما متوجه شده ام این مشکل مرتب کردن بر اساس خزنده تا، درست است؟ 37 00:01:59,270 --> 00:02:04,340 >> اگر ما می خواهیم به مبادله X و Y، و ما تصویب آنها را به یک تابع به نام مبادله، 38 00:02:04,340 --> 00:02:08,680 در داخل تابع مبادله متغیرهای انجام مبادله پول است. 39 00:02:08,680 --> 00:02:12,600 یکی می شود دو، دو می شود یکی است، اما ما در واقع نه 40 00:02:12,600 --> 00:02:16,890 تغییر هر چیزی در اصلی تابع، در تماس گیرنده. 41 00:02:16,890 --> 00:02:19,550 چون ما نمی توانیم، ما تنها کار با نسخه از آنها را. 42 00:02:19,550 --> 00:02:24,760 با اشاره گر چند، ما می توانیم در واقع عبور X و Y به یک تابع. 43 00:02:24,760 --> 00:02:26,960 این تابع می توانید انجام دهید چیزی با آنها. 44 00:02:26,960 --> 00:02:29,250 و کسانی که ارزش متغیرهای در واقع می تواند تغییر دهید. 45 00:02:29,250 --> 00:02:33,710 به طوری که کاملا یک تغییر در این توانایی ما برای کار با داده ها. 46 00:02:33,710 --> 00:02:36,100 >> قبل از اینکه ما به شیرجه رفتن اشاره گرها، من فکر می کنم آن را به ارزش 47 00:02:36,100 --> 00:02:38,580 در نظر گرفتن چند دقیقه به بازگشت به اصول است. 48 00:02:38,580 --> 00:02:41,000 و نگاهی به چگونگی آثار حافظه کامپیوتر 49 00:02:41,000 --> 00:02:45,340 چرا که این دو موضوع در حال رفتن به واقع بسیار مرتبط است. 50 00:02:45,340 --> 00:02:48,480 همانطور که شما احتمالا می دانید، روی سیستم کامپیوتر شما 51 00:02:48,480 --> 00:02:51,310 شما یک هارد دیسک و یا شاید یک درایو حالت جامد، 52 00:02:51,310 --> 00:02:54,430 نوعی از محل ذخیره سازی فایل. 53 00:02:54,430 --> 00:02:57,950 آن را معمولا در جایی در محله 250 گیگابایت 54 00:02:57,950 --> 00:02:59,810 به شاید چند ترابایت در حال حاضر. 55 00:02:59,810 --> 00:03:02,270 و آن را که در آن همه خود را فایل های در نهایت زندگی می کنند، 56 00:03:02,270 --> 00:03:04,870 حتی زمانی که کامپیوتر شما بسته شده است ، شما می توانید آن را به عقب به نوبه خود 57 00:03:04,870 --> 00:03:09,190 و شما پیدا کردن فایل های خود را وجود دارد دوباره زمانی که شما سیستم خود را راه اندازی مجدد. 58 00:03:09,190 --> 00:03:14,820 اما هارد دیسک، مانند یک درایو دیسک سخت، یک هارد دیسک، و یا یک درایو حالت جامد، یک SSD، 59 00:03:14,820 --> 00:03:16,050 فضای ذخیره سازی هستند فقط. 60 00:03:16,050 --> 00:03:20,400 >> ما در واقع نمی تواند انجام هر کاری با داده ها است که در هارد دیسک، 61 00:03:20,400 --> 00:03:22,080 و یا در یک درایو حالت جامد. 62 00:03:22,080 --> 00:03:24,950 به منظور در واقع تغییر داده ها و یا حرکت در اطراف، 63 00:03:24,950 --> 00:03:28,800 ما باید به این حرکت را به RAM، حافظه با دسترسی تصادفی. 64 00:03:28,800 --> 00:03:31,170 در حال حاضر RAM، شما یک مقدار زیادی کمتر از در کامپیوتر شما. 65 00:03:31,170 --> 00:03:34,185 شما ممکن است در جایی در اند محله 512 مگابایت 66 00:03:34,185 --> 00:03:38,850 اگر شما یک کامپیوتر قدیمی، شاید دو، چهار، هشت، 16، 67 00:03:38,850 --> 00:03:41,820 احتمالا حتی یک کمی بیشتر، گیگابایت رم. 68 00:03:41,820 --> 00:03:46,390 به طوری که بسیار کوچکتر است، اما این که در آن تمام داده های فرار وجود دارد. 69 00:03:46,390 --> 00:03:48,270 تا جایی که ما می توانید همه چیز را تغییر دهید. 70 00:03:48,270 --> 00:03:53,350 اما زمانی که ما کامپیوتر ما را خاموش کنید، تمام داده ها در حافظه تخریب شده است. 71 00:03:53,350 --> 00:03:57,150 >> به همین دلیل ما نیاز به هارد دیسک برای محل دائمی بیشتر از آن، 72 00:03:57,150 --> 00:03:59,720 به طوری که آن را exists- آن واقعا بد اگر هر زمان که ما 73 00:03:59,720 --> 00:04:03,310 کامپیوتر ما خاموش، هر فایل در سیستم ما محو شده بود. 74 00:04:03,310 --> 00:04:05,600 بنابراین ما در داخل RAM کار می کنند. 75 00:04:05,600 --> 00:04:09,210 و هر زمان که ما در حال صحبت کردن در مورد حافظه، بسیار زیاد است، در CS50، 76 00:04:09,210 --> 00:04:15,080 ما در حال صحبت کردن در مورد RAM، هارد دیسک نیست. 77 00:04:15,080 --> 00:04:18,657 >> تا زمانی که ما حرکت همه چیز را به حافظه، طول می کشد تا یک مقدار مشخصی از فضا است. 78 00:04:18,657 --> 00:04:20,740 همه انواع داده ای که ما در حال همکاری با 79 00:04:20,740 --> 00:04:23,480 تا مختلف مقدار فضا در RAM. 80 00:04:23,480 --> 00:04:27,600 بنابراین هر زمان شما یک عدد صحیح ایجاد متغیر، چهار بایت از حافظه 81 00:04:27,600 --> 00:04:30,750 به کناری در RAM به طوری که شما می توانید با آن عدد صحیح کار می کنند. 82 00:04:30,750 --> 00:04:34,260 شما می توانید عدد صحیح اعلام، آن را تغییر دهید، به آن اختصاص دهید 83 00:04:34,260 --> 00:04:36,700 به یک مقدار 10 واحد اضافه به یک، به همین ترتیب و غیره. 84 00:04:36,700 --> 00:04:39,440 تمام آنچه که باید در اتفاق می افتد رم، و شما می توانید چهار بایت 85 00:04:39,440 --> 00:04:42,550 برای کار با برای هر عدد صحیح است که شما ایجاد کند. 86 00:04:42,550 --> 00:04:45,410 >> هر شخصیت شما ایجاد می شود یک بایت. 87 00:04:45,410 --> 00:04:48,160 است که فضای چقدر است مورد نیاز برای ذخیره یک شخصیت. 88 00:04:48,160 --> 00:04:51,310 هر شناور، واقعی تعداد، می شود چهار بایت 89 00:04:51,310 --> 00:04:53,390 مگر اینکه آن را دو برابر دقت ممیز شناور 90 00:04:53,390 --> 00:04:56,510 شماره، که اجازه می دهد تا به شما از ارقام دقیق تر یا بیشتر 91 00:04:56,510 --> 00:04:59,300 بعد از نقطه اعشار بدون از دست دادن دقت، 92 00:04:59,300 --> 00:05:01,820 که را تا هشت بایت از حافظه است. 93 00:05:01,820 --> 00:05:06,730 طولانی مشتاق، اعداد صحیح واقعا بزرگ است، نیز تا هشت بایت از حافظه است. 94 00:05:06,730 --> 00:05:09,000 چگونه بسیاری از بایت حافظه انجام رشته را تا؟ 95 00:05:09,000 --> 00:05:12,990 خوب اجازه دهید یک سنجاق در سوال قرار داده در حال حاضر، اما ما به آن آمده است. 96 00:05:12,990 --> 00:05:17,350 >> بنابراین به این ایده از حافظه به عنوان یک آرایه بزرگ از سلول بایت اندازه. 97 00:05:17,350 --> 00:05:20,871 که واقعا همه چیز در آن است، آن را فقط یک آرایه بزرگ از سلول ها، 98 00:05:20,871 --> 00:05:23,370 درست مانند هر آرایه دیگری که شما با آن آشنا هستید و ببینید، 99 00:05:23,370 --> 00:05:26,430 به جز هر عنصر یک بایت گسترده است. 100 00:05:26,430 --> 00:05:30,030 و درست مثل یک آرایه، هر عنصر دارای یک آدرس. 101 00:05:30,030 --> 00:05:32,120 هر عنصر از یک آرایه دارای یک شاخص، و ما 102 00:05:32,120 --> 00:05:36,302 می توانید که شاخص به انجام به اصطلاح استفاده دسترسی تصادفی در آرایه. 103 00:05:36,302 --> 00:05:38,510 ما لازم نیست برای شروع در آغاز از آرایه، 104 00:05:38,510 --> 00:05:40,569 تکرار از طریق هر عنصر آن، 105 00:05:40,569 --> 00:05:41,860 برای پیدا کردن آنچه ما دنبال آن هستید. 106 00:05:41,860 --> 00:05:45,790 فقط می توانیم بگوییم، من می خواهم برای رسیدن به عنصر 15 و یا عنصر 100. 107 00:05:45,790 --> 00:05:49,930 و شما فقط می توانید در این تعداد عبور و بدست آوردن مقدار شما دنبال آن هستید. 108 00:05:49,930 --> 00:05:54,460 >> به طور مشابه هر محل در حافظه دارای یک آدرس. 109 00:05:54,460 --> 00:05:57,320 بنابراین شما ممکن است حافظه چیزی شبیه به این. 110 00:05:57,320 --> 00:06:01,420 در اینجا یک تکه کوچک از این بسیار حافظه، این 20 بایت از حافظه است. 111 00:06:01,420 --> 00:06:04,060 20 بایت اول به خاطر من آدرس وجود دارد در پایین 112 00:06:04,060 --> 00:06:08,890 0، 1، 2، 3، و غیره در تمام راه را تا 19. 113 00:06:08,890 --> 00:06:13,190 و وقتی که من متغیرهای اعلام و زمانی که من شروع به کار با آنها، 114 00:06:13,190 --> 00:06:15,470 سیستم در حال رفتن به مجموعه کنار برخی از فضا برای من 115 00:06:15,470 --> 00:06:17,595 در این حافظه به کار با متغیرهای من. 116 00:06:17,595 --> 00:06:21,610 بنابراین من ممکن است بگویید، کاراکتر C برابر سرمایه H. و چه اتفاقی خواهد افتاد؟ 117 00:06:21,610 --> 00:06:23,880 خوب سیستم است که به را کنار بگذارند برای من یک بایت. 118 00:06:23,880 --> 00:06:27,870 در این مورد آن تعداد بایت انتخاب چهار، بایت به آدرس چهار، 119 00:06:27,870 --> 00:06:31,310 و آن را برای ذخیره H سرمایه حرف در وجود دارد برای من. 120 00:06:31,310 --> 00:06:34,350 پس اگر من می گویند سرعت INT حد برابر 65، آن را 121 00:06:34,350 --> 00:06:36,806 رفتن به کنار بگذارند چهار بایت حافظه برای من. 122 00:06:36,806 --> 00:06:39,180 و آن را برای درمان کسانی چهار بایت به عنوان یک واحد 123 00:06:39,180 --> 00:06:41,305 زیرا آنچه که ما در حال کار با یک عدد صحیح در اینجا است. 124 00:06:41,305 --> 00:06:44,350 و آن را برای ذخیره در 65 وجود دارد. 125 00:06:44,350 --> 00:06:47,000 >> در حال حاضر در حال حاضر من از نوع هستم گفتن شما یک بیت از یک دروغ، 126 00:06:47,000 --> 00:06:50,150 راست، زیرا می دانیم که کامپیوتر در باینری کار می کنند. 127 00:06:50,150 --> 00:06:53,100 آنها درک نمی کنند لزوما چه H سرمایه است 128 00:06:53,100 --> 00:06:57,110 و یا چه 65 است، فقط آنها درک باینری، صفر و آنهایی که. 129 00:06:57,110 --> 00:06:59,000 و به این ترتیب در واقع آنچه ما در حال ذخیره سازی در آن وجود دارد 130 00:06:59,000 --> 00:07:03,450 است که حرف H و عدد 65 نیست، بلکه مبنای دودویی 131 00:07:03,450 --> 00:07:06,980 آن که نگاه چیزی کمی شبیه به این. 132 00:07:06,980 --> 00:07:10,360 و به ویژه در متن متغیر عدد صحیح، 133 00:07:10,360 --> 00:07:13,559 آن را نه فقط به آن را تف به، آن را نمی آن را به عنوان یکی از چهار 134 00:07:13,559 --> 00:07:15,350 تکه بایت لزوما، آن را در واقع رفتن 135 00:07:15,350 --> 00:07:19,570 آن را به عنوان یکی از چهار تکه بایت، که ممکن است چیزی شبیه به این. 136 00:07:19,570 --> 00:07:22,424 و حتی این است که کاملا درست هم، 137 00:07:22,424 --> 00:07:24,840 چون از چیزی به نام endianness، که ما نه 138 00:07:24,840 --> 00:07:26,965 رفتن به به در حال حاضر، اما اگر شما کنجکاو در مورد، 139 00:07:26,965 --> 00:07:29,030 شما می توانید بخوانید تا در کمی و endianness بزرگ است. 140 00:07:29,030 --> 00:07:31,640 اما به خاطر این استدلال، به خاطر این فیلم، 141 00:07:31,640 --> 00:07:34,860 اجازه دهید فقط فرض کنیم که، در واقع، چگونه شماره 65 می 142 00:07:34,860 --> 00:07:36,970 در نمایندگی حافظه در هر سیستم، 143 00:07:36,970 --> 00:07:38,850 هر چند آن را کاملا درست نیست. 144 00:07:38,850 --> 00:07:41,700 >> اما اجازه دهید در واقع فقط از همه باینری به طور کامل از شر، 145 00:07:41,700 --> 00:07:44,460 و فقط در مورد به عنوان H فکر می کنم و 65، آن را بسیار ساده تر 146 00:07:44,460 --> 00:07:47,900 در مورد آن فکر می کنم مثل که به عنوان یک انسان است. 147 00:07:47,900 --> 00:07:51,420 همه حق است، پس از آن نیز به نظر می رسد شاید یک کمی تصادفی که I've- سیستم من 148 00:07:51,420 --> 00:07:55,130 من بایت 5، 6، 7 را نمی دهد، و 8 برای ذخیره عدد صحیح است. 149 00:07:55,130 --> 00:07:58,580 یک دلیل برای آن وجود دارد، بیش از حد، که ما نمی خواهد به در حال حاضر، اما کافی 150 00:07:58,580 --> 00:08:00,496 آن را به می گویند که چه کامپیوتر در حال انجام در اینجا 151 00:08:00,496 --> 00:08:02,810 است که احتمالا یک حرکت خوب در بخشی از آن. 152 00:08:02,810 --> 00:08:06,020 به من حافظه که نمی دهد لزوما به بازگشت بازگشت. 153 00:08:06,020 --> 00:08:10,490 هر چند که رفتن به آن را در حال حاضر اگر من می خواهم به یکی دیگر از رشته، 154 00:08:10,490 --> 00:08:13,080 نام نام خانوادگی، و من می خواهم برای قرار دادن لوید در آن وجود دارد. 155 00:08:13,080 --> 00:08:18,360 من قصد دارم به نیاز به یک جا شخصیت، هر حرف از این که 156 00:08:18,360 --> 00:08:21,330 رفتن به نیاز به یک شخصیت، یک بایت از حافظه است. 157 00:08:21,330 --> 00:08:26,230 بنابراین اگر من می تواند لوید به آرایه من قرار داده مثل این من خیلی خوب برای رفتن، حق با من؟ 158 00:08:26,230 --> 00:08:28,870 چیزی که گم؟ 159 00:08:28,870 --> 00:08:31,840 >> به یاد داشته باشید که هر رشته کار ما با در C با بک اسلش صفر به پایان می رسد، 160 00:08:31,840 --> 00:08:33,339 و ما می توانیم را حذف نمی کند که در اینجا، یا. 161 00:08:33,339 --> 00:08:36,090 ما نیاز به یک بایت را کنار بگذارند از حافظه را به نگه دارید که بنابراین ما 162 00:08:36,090 --> 00:08:39,130 می دانم زمانی که رشته ما به پایان رسیده است. 163 00:08:39,130 --> 00:08:41,049 پس دوباره این ترتیب از راه چیزهایی 164 00:08:41,049 --> 00:08:42,799 به نظر می رسد در قدرت حافظه یک کمی تصادفی، 165 00:08:42,799 --> 00:08:44,870 اما در واقع این است که چگونه اکثر سیستم های طراحی شده اند. 166 00:08:44,870 --> 00:08:48,330 به خط آنها را در تقسیم عددی بر مضرب از چهار، به دلایل دوباره 167 00:08:48,330 --> 00:08:50,080 که ما لازم نیست به مناسب دریافت کنید. 168 00:08:50,080 --> 00:08:53,060 اما این، پس از آن کافی است بگوییم که پس از این سه خط کد، 169 00:08:53,060 --> 00:08:54,810 این چیزی است که حافظه ممکن است مانند نگاه. 170 00:08:54,810 --> 00:08:58,930 اگر من مکان حافظه نیاز 4، 8، و 12 برای نگهداری داده من، 171 00:08:58,930 --> 00:09:01,100 این چیزی است که حافظه من ممکن است مانند نگاه. 172 00:09:01,100 --> 00:09:04,062 >> و فقط به ویژه شود موشکاف در اینجا، هنگامی که 173 00:09:04,062 --> 00:09:06,020 ما در حال صحبت کردن در مورد حافظه آدرس ما معمولا 174 00:09:06,020 --> 00:09:08,390 انجام این کار با استفاده از نمادهای مبنای شانزده است. 175 00:09:08,390 --> 00:09:12,030 پس چرا ما همه از این تبدیل از دهدهی به مبنای شانزده 176 00:09:12,030 --> 00:09:15,010 فقط به خاطر اینکه که به طور کلی چگونه ما به حافظه مراجعه کنید. 177 00:09:15,010 --> 00:09:17,880 بنابراین به جای این که از طریق 0 19، آنچه که ما صفر است 178 00:09:17,880 --> 00:09:20,340 X صفر تا صفر X1 سه. 179 00:09:20,340 --> 00:09:23,790 کسانی که 20 بایت از حافظه است که ما اند و یا ما به دنبال در در این تصویر 180 00:09:23,790 --> 00:09:25,540 درست همین جا. 181 00:09:25,540 --> 00:09:29,310 >> بنابراین همه که می شود گفت، اجازه دهید گام به دور از حافظه را برای یک ثانیه 182 00:09:29,310 --> 00:09:30,490 و به اشاره گر. 183 00:09:30,490 --> 00:09:32,420 در اینجا است که مهم ترین چیزی به خاطر داشته باشید 184 00:09:32,420 --> 00:09:34,070 همانطور که ما شروع به کار با اشاره گر. 185 00:09:34,070 --> 00:09:36,314 یک اشاره گر هیچ است بیش از یک آدرس. 186 00:09:36,314 --> 00:09:38,230 من دوباره آن را می گویند به دلیل آن است که مهم است، 187 00:09:38,230 --> 00:09:42,730 یک اشاره گر هیچ است بیش از یک آدرس. 188 00:09:42,730 --> 00:09:47,760 اشاره گرها آدرس به مکان در حافظه که در آن متغیرهای زندگی می کنند. 189 00:09:47,760 --> 00:09:52,590 آگاهی از این که آن را تبدیل به امیدوارم کمی آسان تر به کار با آنها. 190 00:09:52,590 --> 00:09:54,550 چیز دیگری که من دوست دارم به انجام است که مرتب سازی بر اساس 191 00:09:54,550 --> 00:09:58,510 نمودار بصری، چه اتفاق می افتد با خطوط مختلف از کد. 192 00:09:58,510 --> 00:10:00,660 و ما این را یک زن و شوهر انجام بار در اشاره گرها، 193 00:10:00,660 --> 00:10:03,354 و هنگامی که ما در مورد صحبت های پویا تخصیص حافظه است. 194 00:10:03,354 --> 00:10:06,020 از آنجا که من فکر می کنم که این نمودار می تواند بسیار سودمند. 195 00:10:06,020 --> 00:10:09,540 >> بنابراین اگر من برای مثال می گویند، اعضای هیات K در کد من، آنچه اتفاق می افتد؟ 196 00:10:09,540 --> 00:10:12,524 خب چه اساسا اتفاق می افتد من گرفتن حافظه کنار گذاشته برای من تعیین می کنند، 197 00:10:12,524 --> 00:10:14,690 اما من حتی به دوست ندارد فکر می کنم در مورد آن مانند آن، من 198 00:10:14,690 --> 00:10:16,300 دوست دارم در مورد آن فکر می کنم مثل یک جعبه. 199 00:10:16,300 --> 00:10:20,090 من یک جعبه و آن را سبز رنگ چون من 200 00:10:20,090 --> 00:10:21,750 می توانید اعداد صحیح در جعبه سبز قرار داده است. 201 00:10:21,750 --> 00:10:23,666 اگر آن را یک شخصیت من ممکن است یک جعبه آبی داشته باشد. 202 00:10:23,666 --> 00:10:27,290 اما من همیشه می گویند، اگر من ایجاد یک جعبه است که می تواند اعداد صحیح نگه 203 00:10:27,290 --> 00:10:28,950 که جعبه سبز رنگ شده است. 204 00:10:28,950 --> 00:10:33,020 و من یک نشانگر دائمی و من ک ارسال در کنار آن است. 205 00:10:33,020 --> 00:10:37,590 بنابراین من یک جعبه به نام K، به که من می توانم اعداد صحیح قرار داده است. 206 00:10:37,590 --> 00:10:41,070 بنابراین، هنگامی که من می گویم INT K، که چه در سر من اتفاق می افتد. 207 00:10:41,070 --> 00:10:43,140 اگر من می گویم ک برابر پنج، چه هستم من انجام می دهند؟ 208 00:10:43,140 --> 00:10:45,110 خب، من قرار دادن پنج در کادر، درست است. 209 00:10:45,110 --> 00:10:48,670 این بسیار ساده است، اگر من می گویم INT K، ایجاد یک جعبه به نام K. 210 00:10:48,670 --> 00:10:52,040 اگر من می گویم K برابر با 5، قرار دادن پنج را در جعبه. 211 00:10:52,040 --> 00:10:53,865 امیدوارم که بیش از حد از یک جهش است. 212 00:10:53,865 --> 00:10:55,990 اینجا جایی است که همه چیز را به یک کمی جالب است. 213 00:10:55,990 --> 00:11:02,590 اگر من می گویم نوع int * PK، و حتی اگر من می دانید چه این به این معناست، 214 00:11:02,590 --> 00:11:06,150 این دقیقا چیزی رو برای انجام با یک عدد صحیح. 215 00:11:06,150 --> 00:11:08,211 بنابراین من قصد دارم به رنگ از این کادر سبز حرکت، 216 00:11:08,211 --> 00:11:10,210 من می دانم که آن چیزی کردم برای انجام با یک عدد صحیح، 217 00:11:10,210 --> 00:11:13,400 اما آن را یک عدد صحیح خود نیست، به دلیل آن یک ستاره بین المللی است. 218 00:11:13,400 --> 00:11:15,390 چیزی وجود دارد کمی مختلف در مورد آن. 219 00:11:15,390 --> 00:11:17,620 مشارکت یک عدد صحیح است، اما در غیر این صورت آن را 220 00:11:17,620 --> 00:11:19,830 خیلی متفاوت از نه آنچه ما در مورد صحبت می کردند. 221 00:11:19,830 --> 00:11:24,240 این یک جعبه است، آن هم یک برچسب، آن را با پوشیدن یک PK برچسب، 222 00:11:24,240 --> 00:11:27,280 و آن را قادر به برگزاری ستاره بین المللی، هر آن می باشد. 223 00:11:27,280 --> 00:11:29,894 آنها چیزی برای انجام با اعداد صحیح، به وضوح. 224 00:11:29,894 --> 00:11:31,060 در اینجا چند خط آخر است. 225 00:11:31,060 --> 00:11:37,650 اگر من می گویم PK = & K، ایست، چه چیزی اتفاق افتاده، درست است؟ 226 00:11:37,650 --> 00:11:41,820 بنابراین این عدد تصادفی، به ظاهر تصادفی تعداد، می شود در صندوق ریخته است. 227 00:11:41,820 --> 00:11:44,930 همه این است که، PK است می شود آدرس K. 228 00:11:44,930 --> 00:11:52,867 بنابراین من چسبیده که در آن k در حافظه زندگی می کند، آدرس آن، آدرس بایت آن است. 229 00:11:52,867 --> 00:11:55,200 همه من انجام من گفت: که ارزش آن چیزی است که من قصد دارم 230 00:11:55,200 --> 00:11:59,430 به داخل جعبه من به نام PK قرار داده است. 231 00:11:59,430 --> 00:12:02,080 و از آنجایی که این چیزها اشاره گرها، و به همین دلیل به دنبال 232 00:12:02,080 --> 00:12:04,955 در یک رشته مانند X صفر هشت صفر C هفت چهار هشت 233 00:12:04,955 --> 00:12:07,790 دو صفر است که احتمالا بسیار معنی دار. 234 00:12:07,790 --> 00:12:12,390 هنگامی که ما به طور کلی تجسم اشاره گر، ما در واقع انجام این کار به عنوان اشاره گر. 235 00:12:12,390 --> 00:12:17,000 PK به ما می دهد اطلاعات ما نیاز به پیدا K در حافظه است. 236 00:12:17,000 --> 00:12:19,120 بنابراین اساسا PK است فلش در آن است. 237 00:12:19,120 --> 00:12:21,670 و اگر ما طول راه رفتن که فلش، تصور کنید 238 00:12:21,670 --> 00:12:25,280 آن چیزی است که شما می توانید راه رفتن بر روی، اگر ما راه رفتن در امتداد طول فلش، 239 00:12:25,280 --> 00:12:29,490 در نوک پیکان که، ما را از محل در حافظه پیدا 240 00:12:29,490 --> 00:12:31,390 که در آن k زندگی می کند. 241 00:12:31,390 --> 00:12:34,360 و این واقعا مهم چرا که یک بار ما می دانیم که در آن k زندگی می کند، 242 00:12:34,360 --> 00:12:37,870 ما می توانیم شروع به کار با داده ها در داخل از آن محل حافظه. 243 00:12:37,870 --> 00:12:40,780 هر چند که ما در حال گرفتن کوچک جلوتر از خودمان برای کمی. 244 00:12:40,780 --> 00:12:42,240 >> پس چه یک اشاره گر است؟ 245 00:12:42,240 --> 00:12:45,590 یک اشاره گر از قلم داده است که ارزش یک آدرس حافظه است. 246 00:12:45,590 --> 00:12:49,740 که بود که X صفر هشت چیزهای صفر در رفتن، که یک آدرس حافظه بود. 247 00:12:49,740 --> 00:12:52,060 که یک محل در حافظه بود. 248 00:12:52,060 --> 00:12:55,080 و نوع اشاره گر توصیف نوع 249 00:12:55,080 --> 00:12:56,930 داده شما را در پیدا کردن آن آدرس حافظه. 250 00:12:56,930 --> 00:12:58,810 بنابراین ستاره بین المللی قسمت سمت راست وجود دارد. 251 00:12:58,810 --> 00:13:03,690 اگر من به دنبال که فلش، آن را رفتن به من منجر به یک مکان. 252 00:13:03,690 --> 00:13:06,980 و آن مکان، آنچه که من وجود دارد در مثال من پیدا خواهد کرد، 253 00:13:06,980 --> 00:13:08,240 یک جعبه سبز رنگ است. 254 00:13:08,240 --> 00:13:12,650 این یک عدد صحیح است، این چیزی است که من را پیدا خواهد کرد اگر من به این آدرس بروید. 255 00:13:12,650 --> 00:13:14,830 نوع داده ها از یک اشاره گر توصیف آنچه 256 00:13:14,830 --> 00:13:17,936 شما در آن آدرس حافظه پیدا کنید. 257 00:13:17,936 --> 00:13:19,560 بنابراین در اینجا چیزی که واقعا جالب هر چند. 258 00:13:19,560 --> 00:13:25,090 اشاره گرها به ما اجازه عبور متغیرها بین توابع. 259 00:13:25,090 --> 00:13:28,520 و در واقع متغیرهای عبور و کپی از آنها عبور نمی کند. 260 00:13:28,520 --> 00:13:32,879 چرا که اگر ما دقیقا می دانند که در حافظه برای پیدا کردن یک متغیر، 261 00:13:32,879 --> 00:13:35,670 ما لازم نیست برای ایجاد یک کپی از آن، ما فقط می توانید به آن مکان بروید 262 00:13:35,670 --> 00:13:37,844 و کار با آن متغیر است. 263 00:13:37,844 --> 00:13:40,260 بنابراین در اشاره گر جوهر مرتب سازی بر از یک محیط کامپیوتر را 264 00:13:40,260 --> 00:13:42,360 خیلی بیشتر مانند جهان واقعی، درست است. 265 00:13:42,360 --> 00:13:44,640 >> بنابراین در اینجا یک مقایسه است. 266 00:13:44,640 --> 00:13:48,080 اجازه دهید بگویم که من یک نوت بوک، راست، و آن را پر از یادداشت ها. 267 00:13:48,080 --> 00:13:50,230 و من می خواهم شما را به آن به روز رسانی. 268 00:13:50,230 --> 00:13:53,960 شما یک تابع است که یادداشت روز رسانی، درست است. 269 00:13:53,960 --> 00:13:56,390 در راه ما شده است کار تا کنون، چه 270 00:13:56,390 --> 00:14:02,370 اتفاقی می افتد شما خواهد نوت بوک من را، شما را به فروشگاه اینترنتی کپی بروید، 271 00:14:02,370 --> 00:14:06,410 شما یک کپی زیراکس خواهید هر صفحه از نوت بوک. 272 00:14:06,410 --> 00:14:09,790 شما نوت بوک من تماس ترک بر روی میز من زمانی که شما انجام می شود، 273 00:14:09,790 --> 00:14:14,600 شما بروید و عبور از همه چیز در من نوت بوک است که خارج از تاریخ و یا در اشتباه هستند، 274 00:14:14,600 --> 00:14:19,280 و سپس شما را به تصویب من پشته از صفحات زیراکس 275 00:14:19,280 --> 00:14:22,850 که یک کپی از نوت بوک من با تغییراتی که شما را به آن ساخته شده است. 276 00:14:22,850 --> 00:14:27,040 و در آن نقطه، آن را تا به من به عنوان تابع فراخوانی، به عنوان تماس گیرنده، 277 00:14:27,040 --> 00:14:30,582 برای تصمیم گیری به یادداشت های خود را و ادغام آنها را به نوت بوک من. 278 00:14:30,582 --> 00:14:32,540 بنابراین در بسیاری از مراحل وجود دارد درگیر در اینجا، درست است. 279 00:14:32,540 --> 00:14:34,850 دوست ندارم می شود بهتر است آن را اگر من فقط می گویند، هی، می تواند شما 280 00:14:34,850 --> 00:14:38,370 به روز رسانی نوت بوک من برای من، شما دست نوت بوک من، 281 00:14:38,370 --> 00:14:40,440 و شما را همه چیز و به معنای واقعی کلمه عبور آنها 282 00:14:40,440 --> 00:14:42,810 و به روز رسانی یادداشت های من در نوت بوک من. 283 00:14:42,810 --> 00:14:45,140 و سپس به من نوت بوک من را به عقب. 284 00:14:45,140 --> 00:14:47,320 این نوع از چیزی است که اشاره گر به ما اجازه انجام، 285 00:14:47,320 --> 00:14:51,320 آنها را از این محیط زیادی بیشتر شبیه چگونه ما در واقعیت به کار گیرند. 286 00:14:51,320 --> 00:14:54,640 >> همه حق به طوری که چه یک اشاره گر است، اجازه دهید صحبت 287 00:14:54,640 --> 00:14:58,040 در مورد چگونگی اشاره گرها در C کار می کنند، و چگونه ما می توانیم شروع به کار با آنها. 288 00:14:58,040 --> 00:15:02,550 بنابراین یک اشاره گر بسیار ساده وجود دارد در C به نام اشاره گر تهی. 289 00:15:02,550 --> 00:15:04,830 نقاط اشاره گر تهی به هیچ چیز. 290 00:15:04,830 --> 00:15:08,310 این احتمالا به نظر می رسد مانند آن را در واقع نه چیزی که بسیار مفید، 291 00:15:08,310 --> 00:15:10,500 اما ما به عنوان یک دید کمی بعد در، این واقعیت است 292 00:15:10,500 --> 00:15:15,410 که این اشاره گر تهی وجود دارد در واقع واقعا می تواند در مفید آمده است. 293 00:15:15,410 --> 00:15:19,090 و هر زمان که شما یک اشاره گر، ایجاد و شما immediately- ارزش خود را تنظیم نشده 294 00:15:19,090 --> 00:15:21,060 یک مثال از تنظیم ارزش خود را بلافاصله 295 00:15:21,060 --> 00:15:25,401 خواهد شد چند اسلاید تماس که در آن من گفت PK برابر & K، 296 00:15:25,401 --> 00:15:28,740 PK می شود آدرس K، به عنوان خواهیم دید که چه معناست، 297 00:15:28,740 --> 00:15:32,990 خواهیم دید که چگونه به کد که shortly- اگر ما ارزش خود را به چیزی تنظیم نشده 298 00:15:32,990 --> 00:15:35,380 بلافاصله معنی دار، شما همیشه باید 299 00:15:35,380 --> 00:15:37,480 مجموعه ای اشاره گر خود را به نقطه به تهی. 300 00:15:37,480 --> 00:15:40,260 شما باید آن را به نقطه به هیچ چیز. 301 00:15:40,260 --> 00:15:43,614 >> که بسیار متفاوت از فقط ترک ارزش آن را به عنوان 302 00:15:43,614 --> 00:15:45,530 و پس از آن اعلام اشاره گر و فقط فرض 303 00:15:45,530 --> 00:15:48,042 آن را تهی چرا که به ندرت درست است. 304 00:15:48,042 --> 00:15:50,000 بنابراین شما همیشه باید تنظیم ارزش یک اشاره گر 305 00:15:50,000 --> 00:15:55,690 به تهی اگر شما ارزش خود را تنظیم نشده به چیزی معنی دار بلافاصله. 306 00:15:55,690 --> 00:15:59,090 شما می توانید بررسی کنید که آیا ارزش یک اشاره گر تهی است با استفاده از عملگر برابری 307 00:15:59,090 --> 00:16:05,450 (==)، درست مثل شما مقایسه هر عدد صحیح ارزش ها یا ارزش شخصیت با استفاده از (==) 308 00:16:05,450 --> 00:16:06,320 به خوبی. 309 00:16:06,320 --> 00:16:10,994 این یک نوع خاص از ثابت است ارزش است که شما می توانید استفاده کنید برای تست. 310 00:16:10,994 --> 00:16:13,160 به طوری که یک بسیار ساده اشاره گر، اشاره گر تهی. 311 00:16:13,160 --> 00:16:15,320 راه دیگر برای ایجاد یک اشاره گر است که برای استخراج 312 00:16:15,320 --> 00:16:18,240 آدرس یک متغیر شما در حال حاضر ایجاد کرده اید، 313 00:16:18,240 --> 00:16:22,330 و شما این کار را با استفاده از & استخراج آدرس اپراتور. 314 00:16:22,330 --> 00:16:26,720 که ما در حال حاضر قبلا دیده در مثال اول نمودار من نشان داد. 315 00:16:26,720 --> 00:16:31,450 بنابراین اگر x یک متغیر که ما این است در حال حاضر از نوع عدد صحیح، و 316 00:16:31,450 --> 00:16:35,110 پس از آن و X اشاره گر به یک عدد صحیح است. 317 00:16:35,110 --> 00:16:39,810 & X است- یاد داشته باشید، و در حال رفتن به استخراج آدرس از چیزی که در سمت راست. 318 00:16:39,810 --> 00:16:45,350 و از آنجایی که یک اشاره گر فقط یک آدرس است، از & X یک اشاره گر به یک عدد صحیح است 319 00:16:45,350 --> 00:16:48,560 ارزش که در آن در زندگی حافظه x است. 320 00:16:48,560 --> 00:16:50,460 این آدرس X را دارد. 321 00:16:50,460 --> 00:16:53,296 بنابراین & X آدرس x است. 322 00:16:53,296 --> 00:16:55,670 اجازه بدهید این یک گام بیشتر و اتصال به چیزی 323 00:16:55,670 --> 00:16:58,380 من به در یک ویدیو قبل اشاره کرد. 324 00:16:58,380 --> 00:17:06,730 اگر ARR آرایه ای از دو برابر است، پس از آن و براکت ARR من یک اشاره گر است 325 00:17:06,730 --> 00:17:08,109 به دو برابر شود. 326 00:17:08,109 --> 00:17:08,970 باشه. 327 00:17:08,970 --> 00:17:12,160 ورود براکت من، اگر ورود آرایه ای از دو برابر است، 328 00:17:12,160 --> 00:17:19,069 پس از آن ورود براکت من است عنصر i ام که آرایه، 329 00:17:19,069 --> 00:17:29,270 و و ورود براکت من است که در آن در حافظه عنصر i ام از ورود وجود دارد. 330 00:17:29,270 --> 00:17:31,790 >> بنابراین چه مفهوم در اینجا؟ 331 00:17:31,790 --> 00:17:34,570 نام آرایه، مفهوم از این که کل آن، 332 00:17:34,570 --> 00:17:39,290 است که نام یک آرایه است در واقع خود را یک اشاره گر. 333 00:17:39,290 --> 00:17:41,170 شما مشغول به کار با اشاره گر در تمام طول 334 00:17:41,170 --> 00:17:45,290 هر بار که شما یک آرایه استفاده می شود. 335 00:17:45,290 --> 00:17:49,090 به یاد داشته باشید از مثال در حوزه دید متغیر، 336 00:17:49,090 --> 00:17:53,420 در نزدیکی پایان این ویدئو من در حال حاضر یک مثال که در آن ما باید یک تابع 337 00:17:53,420 --> 00:17:56,890 نام INT مجموعه و یک تابع به نام آرایه مجموعه ای. 338 00:17:56,890 --> 00:18:00,490 و به چالش کشیدن خود را برای تعیین یا نه، و یا چه 339 00:18:00,490 --> 00:18:03,220 ارزش هایی که ما چاپ در پایان از عملکرد، 340 00:18:03,220 --> 00:18:05,960 در پایان برنامه اصلی. 341 00:18:05,960 --> 00:18:08,740 >> اگر شما از این مثال به یاد و یا اگر شما این ویدئو را تماشا کرده ام، 342 00:18:08,740 --> 00:18:13,080 شما می دانید که هنگامی که شما- تماس به مجموعه ای از نوع int به طور موثر انجام نمی دهد. 343 00:18:13,080 --> 00:18:16,390 اما پاسخ به مجموعه ای از آرایه می کند. 344 00:18:16,390 --> 00:18:19,280 و من از روی همین دلیل یشمی که در این مورد در آن زمان بود. 345 00:18:19,280 --> 00:18:22,363 من فقط گفتم، خوب که این آرایه، آن را ویژه، شما می دانید، یک دلیل وجود دارد. 346 00:18:22,363 --> 00:18:25,020 دلیل این است که یک آرایه نام و نام خانوادگی است که واقعا فقط یک اشاره گر، 347 00:18:25,020 --> 00:18:28,740 و این ویژه ای وجود دارد استفاده از دستور براکت که 348 00:18:28,740 --> 00:18:30,510 همه چیز را خیلی بهتر برای کار با. 349 00:18:30,510 --> 00:18:34,410 و آنها را این ایده از یک اشاره گر بسیار کمتر تهدید آمیز، 350 00:18:34,410 --> 00:18:36,800 و به همین دلیل آنها مرتب سازی بر هستید از در راه است که ارائه شده است. 351 00:18:36,800 --> 00:18:38,600 اما واقعا آرایه فقط اشاره گر. 352 00:18:38,600 --> 00:18:41,580 و به همین دلیل هنگامی که ما یک تغییر به آرایه، 353 00:18:41,580 --> 00:18:44,880 هنگامی که ما یک آرایه به عنوان یک پارامتر به یک تابع و یا به عنوان یک استدلال 354 00:18:44,880 --> 00:18:50,110 به یک تابع، محتویات آرایه در واقع در هر دو پذیرنده تغییر 355 00:18:50,110 --> 00:18:51,160 و در تماس گیرنده. 356 00:18:51,160 --> 00:18:55,846 که برای هر نوع دیگر از متغیر ما شاهد بود که چنین نیست. 357 00:18:55,846 --> 00:18:58,970 به طوری که فقط چیزی برای نگه داشتن در این ذهن هنگامی که شما در حال کار با اشاره گرها، 358 00:18:58,970 --> 00:19:01,610 این است که نام یک آرایه در واقع یک اشاره گر 359 00:19:01,610 --> 00:19:04,750 به عنصر اول که آرایه. 360 00:19:04,750 --> 00:19:08,930 >> OK بنابراین در حال حاضر ما همه این حقایق، اجازه دهید رفتن، درست است. 361 00:19:08,930 --> 00:19:11,370 چرا ما در مورد مراقبت که در آن چیزی زندگی می کند. 362 00:19:11,370 --> 00:19:14,120 خوب مثل من گفت، آن را بسیار بدانید که در آن زندگی می کند چیزی مفید 363 00:19:14,120 --> 00:19:17,240 بنابراین شما می توانید به آنجا رفت و آن را تغییر دهید. 364 00:19:17,240 --> 00:19:19,390 کار با آن و در واقع اند چیزی است که شما 365 00:19:19,390 --> 00:19:23,710 می خواهم به انجام به آن اثر را متغیر، و اثر در برخی از کپی از آن را ندارد. 366 00:19:23,710 --> 00:19:26,150 این است که به نام غیر مرجع. 367 00:19:26,150 --> 00:19:28,690 ما به مرجع بروید و ما ارزش تغییر وجود دارد. 368 00:19:28,690 --> 00:19:32,660 بنابراین اگر ما به یک اشاره گر و آن را به نام کامپیوتر، و آن را به یک شخصیت اشاره می کند، 369 00:19:32,660 --> 00:19:40,610 پس می توان گفت * و * PC کامپیوتر است که نام و نام خانوادگی از آنچه که ما را پیدا کنید اگر ما به 370 00:19:40,610 --> 00:19:42,910 به کامپیوتر آدرس. 371 00:19:42,910 --> 00:19:47,860 یک شخصیت چه ما آنجا پیدا کردن است و * PC است که چگونه ما به داده ها در آن اشاره 372 00:19:47,860 --> 00:19:48,880 محل. 373 00:19:48,880 --> 00:19:54,150 بنابراین ما می تواند چیزی شبیه به می گویند * = D کامپیوتر و یا چیزی شبیه به آن، 374 00:19:54,150 --> 00:19:59,280 و این بدان معناست که هر چه در حافظه آدرس کامپیوتر بود، 375 00:19:59,280 --> 00:20:07,040 هر شخصیت قبلا وجود دارد، در حال حاضر D، اگر ما می گویند * PC = D. 376 00:20:07,040 --> 00:20:10,090 >> بنابراین در اینجا ما دوباره با رفتن چیزهای عجیب و غریب C برخی، درست است. 377 00:20:10,090 --> 00:20:14,560 بنابراین ما قبلا به عنوان دیده می شود * به نحوی بخشی از نوع داده ها، 378 00:20:14,560 --> 00:20:17,160 و در حال حاضر آن را در حال استفاده در زمینه کمی متفاوت 379 00:20:17,160 --> 00:20:19,605 برای دسترسی به داده در یک محل. 380 00:20:19,605 --> 00:20:22,480 من می دانم که کمی گیج کننده و که در واقع بخشی از این طیف 381 00:20:22,480 --> 00:20:25,740 مانند، چرا اشاره گرها این اساطیر در اطراف آنها به عنوان بسیار پیچیده، 382 00:20:25,740 --> 00:20:28,250 نوع مشکل نحو است، صادقانه. 383 00:20:28,250 --> 00:20:31,810 اما * در هر دو زمینه استفاده می شود، هر دو به عنوان بخشی از نام نوع، 384 00:20:31,810 --> 00:20:34,100 و ما یک کمی را ببینید چیزی بعد دیگری، TOO. 385 00:20:34,100 --> 00:20:36,490 و در حال حاضر است که اپراتور dereference. 386 00:20:36,490 --> 00:20:38,760 پس از آن به مرجع می رود، دسترسی به داده های آن 387 00:20:38,760 --> 00:20:43,000 در محل اشاره گر، و شما اجازه می دهد به آن را دستکاری خواهد شد. 388 00:20:43,000 --> 00:20:45,900 >> در حال حاضر این است که بسیار شبیه به دیدن همسایه خود را، درست است. 389 00:20:45,900 --> 00:20:48,710 اگر شما می دانید آنچه شما همسایه زندگی می کند، شما 390 00:20:48,710 --> 00:20:50,730 حلق آویز نیست با همسایه خود را. 391 00:20:50,730 --> 00:20:53,510 شما می دانید شما اتفاق می افتد می دانم که آنها زندگی می کنند، 392 00:20:53,510 --> 00:20:56,870 اما این بدان معنا نیست که توسط موجب داشتن که دانش 393 00:20:56,870 --> 00:20:59,170 شما در حال تعامل با آنها. 394 00:20:59,170 --> 00:21:01,920 اگر می خواهید به تعامل با آنها، شما باید برای رفتن به خانه خود، 395 00:21:01,920 --> 00:21:03,760 شما باید برای رفتن به جایی که آنها زندگی می کنند. 396 00:21:03,760 --> 00:21:07,440 و هنگامی که شما انجام این کار، سپس شما می توانید ارتباط برقرار 397 00:21:07,440 --> 00:21:09,420 با آنها را درست مثل شما می خواهید به. 398 00:21:09,420 --> 00:21:12,730 و به همین ترتیب با متغیرها، شما نیاز به رفتن به آدرس خود 399 00:21:12,730 --> 00:21:15,320 اگر شما می خواهید به آنها در تعامل است، شما نمی توانید فقط آدرس مطمئن شوید. 400 00:21:15,320 --> 00:21:21,495 و راه شما به آدرس است برای استفاده *، اپراتور dereference. 401 00:21:21,495 --> 00:21:23,620 شما چه فکر میکنید اتفاق می افتد اگر ما سعی و ارجاع 402 00:21:23,620 --> 00:21:25,260 یک اشاره گر است که مقدار آن صفر است؟ 403 00:21:25,260 --> 00:21:28,470 به یاد بیاورید که تهی اشاره گر اشاره به هیچ چیز. 404 00:21:28,470 --> 00:21:34,110 بنابراین اگر شما سعی می کنید و ارجاع هیچ چیز و یا رفتن به یک چیزی آدرس، 405 00:21:34,110 --> 00:21:36,800 شما چه فکر میکنید اتفاقی می افتد؟ 406 00:21:36,800 --> 00:21:39,630 تقسیم بندی خوب اگر شما حدس زده گسل، شما می شود، مناسب است. 407 00:21:39,630 --> 00:21:41,390 اگر شما سعی می کنید و ارجاع یک اشاره گر NULL، 408 00:21:41,390 --> 00:21:43,140 شما یک تقسیم بندی رنج می برند گسل. اما صبر کنید، 409 00:21:43,140 --> 00:21:45,820 آیا به تو بگویم، که اگر شما نمی خواهید 410 00:21:45,820 --> 00:21:49,220 به مجموعه ای از ارزش خود را از خود اشاره گر به چیزی معنی دار، 411 00:21:49,220 --> 00:21:51,000 شما باید مجموعه تهی؟ 412 00:21:51,000 --> 00:21:55,290 من و در واقع تقسیم بندی گسل نوع از رفتار خوب است. 413 00:21:55,290 --> 00:21:58,680 >> آیا تا به حال یک متغیر اعلام کرد و ارزش خود را اختصاص داده است به سرعت؟ 414 00:21:58,680 --> 00:22:02,680 بنابراین شما فقط می گویند نوع int x؛ شما نمی در واقع آن را به هر چیزی اختصاص 415 00:22:02,680 --> 00:22:05,340 و سپس بعد از آن در کد خود را، شما نسخه قابل چاپ کردن مقدار x، 416 00:22:05,340 --> 00:22:07,650 داشتن هنوز هم نمی به هر چیزی اختصاص داده است. 417 00:22:07,650 --> 00:22:10,370 اغلب شما می خواهید صفر است، اما گاهی اوقات شما 418 00:22:10,370 --> 00:22:15,000 ممکن است برخی از عدد تصادفی را دریافت، و شما هیچ ایده که از کجا آمده. 419 00:22:15,000 --> 00:22:16,750 به طور مشابه می توانید همه چیز اتفاق می افتد با اشاره گر. 420 00:22:16,750 --> 00:22:20,110 هنگامی که شما یک اشاره گر اعلام نوع int * PK برای مثال، 421 00:22:20,110 --> 00:22:23,490 و شما آن را به یک مقدار مشخص نمی کند، شما چهار بایت برای حافظه است. 422 00:22:23,490 --> 00:22:25,950 هر چهار بایت از حافظه سیستم می تواند 423 00:22:25,950 --> 00:22:28,970 پیدا است که برخی از ارزش معنی دار است. 424 00:22:28,970 --> 00:22:31,760 و ممکن است وجود داشته اند چیزی در حال حاضر وجود دارد که 425 00:22:31,760 --> 00:22:34,190 دیگر توسط دیگر مورد نیاز تابع، بنابراین شما فقط باید 426 00:22:34,190 --> 00:22:35,900 هر چه اطلاعات وجود دارد. 427 00:22:35,900 --> 00:22:40,570 >> اگر شما سعی در انجام ارجاع برخی از آدرس که شما نکن وجود دارد 428 00:22:40,570 --> 00:22:43,410 در حال حاضر بایت و در وجود دارد، که در حال حاضر در اشاره گر خود را. 429 00:22:43,410 --> 00:22:47,470 اگر شما سعی می کنید و ارجاع که اشاره گر، شما ممکن است با برخی از حافظه خراب 430 00:22:47,470 --> 00:22:49,390 که شما قصد به یک ظرف غذا با آن است. 431 00:22:49,390 --> 00:22:51,639 و در واقع شما می توانید انجام چیزی واقعا ویرانگر، 432 00:22:51,639 --> 00:22:54,880 مانند شکستن یک برنامه دیگر، و یا شکستن یک تابع دیگر، 433 00:22:54,880 --> 00:22:58,289 و یا انجام کاری مخرب است که شما قصد به انجام در همه. 434 00:22:58,289 --> 00:23:00,080 و به طوری که به همین دلیل آن در واقع یک ایده خوب 435 00:23:00,080 --> 00:23:04,030 به مجموعه ای از اشاره گر خود را به تهی اگر شما آنها را به چیزی معنی دار تنظیم نشده است. 436 00:23:04,030 --> 00:23:06,760 این احتمالا در بهتر پایان روز برای برنامه های خود 437 00:23:06,760 --> 00:23:09,840 پس از آن به سقوط آن را به انجام چیزی است که پیچ تا 438 00:23:09,840 --> 00:23:12,400 برنامه دیگر و یا عملکرد دیگر است. 439 00:23:12,400 --> 00:23:15,207 که رفتار است که احتمالا حتی کمتر از ایده آل توفنده. 440 00:23:15,207 --> 00:23:17,040 و به طوری که به همین دلیل آن در واقع یک عادت خوب 441 00:23:17,040 --> 00:23:20,920 برای دریافت به به مجموعه ای از اشاره گر خود را به تهی اگر شما آنها را تنظیم نشده 442 00:23:20,920 --> 00:23:24,540 به ارزش معنی دار بلافاصله، یک مقدار که شما می دانید 443 00:23:24,540 --> 00:23:27,260 و است که شما خیال راحت می توانید ارجاع. 444 00:23:27,260 --> 00:23:32,240 >> بنابراین اجازه دهید اکنون آمده و نگاهی در نحو کلی از وضعیت. 445 00:23:32,240 --> 00:23:37,400 اگر من می گویم نوع int * P ؛، چه من فقط انجام می شود؟ 446 00:23:37,400 --> 00:23:38,530 من چه کرده ام این است. 447 00:23:38,530 --> 00:23:43,290 من می دانم که مقدار p به یک آدرس است چرا که همه اشاره گر فقط 448 00:23:43,290 --> 00:23:44,660 آدرس ها. 449 00:23:44,660 --> 00:23:47,750 من می توانم ارجاع P با استفاده از عملگر *. 450 00:23:47,750 --> 00:23:51,250 در این زمینه در اینجا، در بسیار بالا به یاد * بخشی از نوع است. 451 00:23:51,250 --> 00:23:53,510 نوع int * نوع داده است. 452 00:23:53,510 --> 00:23:56,150 اما من ارجاع می P با استفاده از عملگر *، 453 00:23:56,150 --> 00:24:01,897 و اگر من این کار را، اگر من به این آدرس بروید، چه خواهد شد که در آن آدرس را پیدا کنم؟ 454 00:24:01,897 --> 00:24:02,855 من یک عدد صحیح پیدا کنید. 455 00:24:02,855 --> 00:24:05,910 بنابراین اعضای هیات * P است که اساسا گفت، ص یک آدرس است. 456 00:24:05,910 --> 00:24:09,500 من می توانم ارجاع P و اگر من، من یک عدد صحیح را پیدا 457 00:24:09,500 --> 00:24:11,920 در آن محل حافظه است. 458 00:24:11,920 --> 00:24:14,260 >> OK بنابراین من گفت این بود دیگر وجود دارد چیزی که آزار دهنده با ستاره 459 00:24:14,260 --> 00:24:17,060 و در اینجا آن است که چیزی که آزار دهنده با ستاره است. 460 00:24:17,060 --> 00:24:21,640 آیا تا کنون سعی به اعلام متغیرهای متعدد از همان نوع 461 00:24:21,640 --> 00:24:24,409 در همان خط از کد؟ 462 00:24:24,409 --> 00:24:27,700 بنابراین برای یک ثانیه، وانمود کند که خط، کد من در واقع در سبز وجود دارد 463 00:24:27,700 --> 00:24:29,366 وجود ندارد و آن را فقط می گوید نوع int x، y و z ؛. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 آنچه را که انجام است که در واقع ایجاد سه متغیرهای عدد صحیح را برای شما، 466 00:24:34,550 --> 00:24:36,930 یکی از X نامیده می شود، یکی به نام y و Z به نام. 467 00:24:36,930 --> 00:24:41,510 این یک راه برای انجام آن بدون. نیاز به تقسیم بر روی سه خط. 468 00:24:41,510 --> 00:24:43,890 >> اینجا جایی است که ستاره دوباره آزار دهنده هر چند، 469 00:24:43,890 --> 00:24:49,200 به این دلیل که در واقع بخشی * از هر دو نام و نوع بخش 470 00:24:49,200 --> 00:24:50,320 از نام متغیر. 471 00:24:50,320 --> 00:24:56,430 و بنابراین اگر من می گویند نوع int * پیکسل، PY، PZ، آنچه که من در واقع یک اشاره گر به یک عدد صحیح است 472 00:24:56,430 --> 00:25:01,650 به نام پیکسل و دو عدد صحیح، PY و PZ. 473 00:25:01,650 --> 00:25:04,950 و این احتمالا به که چه ما می خواهیم، ​​این خوب نیست. 474 00:25:04,950 --> 00:25:09,290 >> بنابراین اگر من می خواهم برای ایجاد اشاره گر چند در همان خط، از همان نوع، 475 00:25:09,290 --> 00:25:12,140 و ستاره، آنچه که من در واقع نیاز را به انجام * سرب، * PC است می گویند نوع int * PA،. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 در حال حاضر داشتن فقط گفت که و در حال حاضر شما این گفتن، 478 00:25:20,300 --> 00:25:22,170 شما احتمالا هرگز این کار را انجام خواهد داد. 479 00:25:22,170 --> 00:25:25,170 و آن را احتمالا چیز خوبی صادقانه، زیرا شما ممکن است سهوا 480 00:25:25,170 --> 00:25:26,544 حذف یک ستاره، چیزی شبیه به آن. 481 00:25:26,544 --> 00:25:29,290 این احتمالا بهترین شاید اعلام اشاره گرها در خطوط فرد، 482 00:25:29,290 --> 00:25:31,373 اما آن را فقط یک دیگر است از آن به نحو آزار دهنده 483 00:25:31,373 --> 00:25:35,310 همه چیز با ستاره که اشاره گر بسیار دشوار برای کار با. 484 00:25:35,310 --> 00:25:39,480 از آنجا که آن فقط این است نحوی ظروف سرباز یا مسافر شما باید به کار را از طریق. 485 00:25:39,480 --> 00:25:41,600 با عمل آن را واقعا تبدیل به طبیعت دوم. 486 00:25:41,600 --> 00:25:45,410 من هنوز هم اشتباهات را با آن هنوز هم پس از برنامه نویسی به مدت 10 سال، 487 00:25:45,410 --> 00:25:49,630 به طوری که ناراحت نمی شود اگر چیزی اتفاق می افتد به شما، آن را بسیار رایج صادقانه. 488 00:25:49,630 --> 00:25:52,850 این واقعا نوع یک نقص از نحو. 489 00:25:52,850 --> 00:25:54,900 >> OK پس من از نوع وعده داده که ما دوباره 490 00:25:54,900 --> 00:25:59,370 مفهوم چقدر بزرگ یک رشته است. 491 00:25:59,370 --> 00:26:02,750 خب اگر من به شما گفت که یک رشته، ما واقعا نوع 492 00:26:02,750 --> 00:26:04,140 شده است دروغ گفتن به شما تمام وقت. 493 00:26:04,140 --> 00:26:06,181 هیچ نوع داده وجود دارد به نام رشته، و در واقع من 494 00:26:06,181 --> 00:26:09,730 این در یکی از ذکر ما اولین فیلم ها در انواع داده ها، 495 00:26:09,730 --> 00:26:13,820 که رشته یک نوع داده بود که برای شما در CS50.h. ایجاد شد 496 00:26:13,820 --> 00:26:17,050 شما باید به # شامل CS50.H به منظور استفاده از آن. 497 00:26:17,050 --> 00:26:19,250 >> خب رشته است که واقعا فقط یک نام مستعار برای چیزی 498 00:26:19,250 --> 00:26:23,600 نام * کاراکتر، یک اشاره گر به یک شخصیت. 499 00:26:23,600 --> 00:26:26,010 خب اشاره گر، به یاد بیاورید، فقط آدرس. 500 00:26:26,010 --> 00:26:28,780 پس چه اندازه است در بایت یک رشته؟ 501 00:26:28,780 --> 00:26:29,796 به خوبی از آن چهار یا هشت است. 502 00:26:29,796 --> 00:26:32,170 و به همین دلیل من می گویم چهار یا هشت دلیل است که آن را در واقع 503 00:26:32,170 --> 00:26:36,730 بستگی به سیستم، اگر شما با استفاده IDE CS50، کاراکتر * به اندازه یک کاراکتر است 504 00:26:36,730 --> 00:26:39,340 * هشت، یک سیستم 64 بیتی است. 505 00:26:39,340 --> 00:26:43,850 هر آدرس در حافظه 64 بیت می باشد. 506 00:26:43,850 --> 00:26:48,270 اگر شما با استفاده دستگاه CS50 و یا با استفاده از هر ماشین 32 بیتی، 507 00:26:48,270 --> 00:26:51,640 و شما شنیده ام که مدت 32 بیتی ماشین آلات، چه ماشین 32 بیتی است؟ 508 00:26:51,640 --> 00:26:56,090 خوب آن را فقط به این معنی که هر آدرس در حافظه 32 بیت می باشد. 509 00:26:56,090 --> 00:26:59,140 و به این ترتیب 32 بیت چهار بایت است. 510 00:26:59,140 --> 00:27:02,710 بنابراین یک کاراکتر * چهار یا هشت است بسته به سیستم شما بایت. 511 00:27:02,710 --> 00:27:06,100 و در واقع هر نوع داده ها، و یک اشاره گر به هر گونه اطلاعات 512 00:27:06,100 --> 00:27:12,030 نوع، از همه اشاره گر فقط آدرس، چهار یا هشت بایت است. 513 00:27:12,030 --> 00:27:14,030 بنابراین اجازه دهید این دوباره نمودار و اجازه دهید نتیجه گیری 514 00:27:14,030 --> 00:27:18,130 این فیلم با کمی ورزش کنید. 515 00:27:18,130 --> 00:27:21,600 بنابراین در اینجا ما با نمودار در سمت چپ است در همان ابتدا از ویدئو. 516 00:27:21,600 --> 00:27:23,110 بنابراین آنچه در حال حاضر اتفاق می افتد اگر من می گویم * PK = 35؟ 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 پس چه معنی است وقتی که من می گویند، * PK = 35؟ 519 00:27:30,530 --> 00:27:32,420 یک دوم. 520 00:27:32,420 --> 00:27:34,990 * PK. 521 00:27:34,990 --> 00:27:39,890 در زمینه در اینجا، * است اپراتور dereference. 522 00:27:39,890 --> 00:27:42,110 بنابراین، هنگامی که ارجاع اپراتور استفاده می شود، 523 00:27:42,110 --> 00:27:48,520 ما به آدرس اشاره به توسط PK، و ما تغییر چیزی است که ما پیدا کنید. 524 00:27:48,520 --> 00:27:55,270 بنابراین * PK = 35 به طور موثر این کار را به تصویر. 525 00:27:55,270 --> 00:27:58,110 بنابراین آن را اساسا از لحاظ دستوری یکسان به داشتن گفت K = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> یکی بیشتر. 528 00:28:01,930 --> 00:28:05,510 اگر من می گویم INT متر، من ایجاد یک متغیر جدید به نام متر. 529 00:28:05,510 --> 00:28:08,260 یک جعبه جدید، آن را یک جعبه سبز به دلیل آن را به برگزاری یک عدد صحیح، 530 00:28:08,260 --> 00:28:09,840 و آن را با برچسب متر. 531 00:28:09,840 --> 00:28:14,960 اگر من می گویم M = 4، من یک قرار عدد صحیح به آن جعبه. 532 00:28:14,960 --> 00:28:20,290 اگر می گویند PK = & M، چگونه این تغییر نمودار؟ 533 00:28:20,290 --> 00:28:28,760 PK = & M، آیا شما به یاد چه و اپراتور می کند و یا نامیده می شود؟ 534 00:28:28,760 --> 00:28:34,430 به یاد داشته باشید که نام متغیر و برخی از آدرس از نام متغیر است. 535 00:28:34,430 --> 00:28:38,740 بنابراین آنچه که ما در حال گفت است PK می شود آدرس متر. 536 00:28:38,740 --> 00:28:42,010 و تا به طور موثر چه اتفاقی می افتد نمودار این است که PK نقاط دیگر 537 00:28:42,010 --> 00:28:46,420 به k، اما امتیاز به متر. 538 00:28:46,420 --> 00:28:48,470 >> دوباره اشاره گر بسیار روی حیله و تزویر به کار با 539 00:28:48,470 --> 00:28:50,620 و آنها را به بسیاری از عمل، اما به دلیل 540 00:28:50,620 --> 00:28:54,150 از توانایی خود برای شما اجازه می دهد به تصویب داده ها بین توابع 541 00:28:54,150 --> 00:28:56,945 و در واقع کسانی که تغییرات در عمل، 542 00:28:56,945 --> 00:28:58,820 گرفتن سر خود را در اطراف واقعا مهم است. 543 00:28:58,820 --> 00:29:02,590 احتمالا پیچیده ترین موضوع بحث ما در CS50 مورد بحث، 544 00:29:02,590 --> 00:29:05,910 اما ارزش شما که از استفاده از اشاره گر 545 00:29:05,910 --> 00:29:09,200 بسیار بیشتر از عوارض که از یادگیری آنها آمده است. 546 00:29:09,200 --> 00:29:12,690 بنابراین من برای شما آرزوی بهترین ها را از شانس یادگیری در مورد اشاره گر. 547 00:29:12,690 --> 00:29:15,760 من داگ لوید هستم، این CS50. 548 00:29:15,760 --> 00:29:17,447