1 00:00:00,000 --> 00:00:06,030 >> [عزف الموسيقى] 2 00:00:06,030 --> 00:00:08,390 >> DOUG لويد: مؤشرات، نحن هنا. 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 نحن نتحدث عن ذاكرة الوصول العشوائي، وليس القرص الثابت. 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 تناول مختلف كميات من المساحة في ذاكرة الوصول العشوائي. 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 أو العنصر 100th. 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 لذلك أنا قد يقول، شار ج يساوي رأس المال 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 إذا كنت ثم يقول الباحث سرعة الحد يساوي 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 س الصفر من خلال الصفر 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 >> لذلك إذا قلت على سبيل المثال، الباحث ك في قانون بلدي، ما الذي يحدث؟ 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 إذا كان حرف I قد يكون لديك المربع الأزرق. 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 لذلك ليس لدي صندوق يسمى ك، إلى التي يمكن أن أضع صحيحة. 206 00:10:37,590 --> 00:10:41,070 لذلك عندما أقول الباحث ك، وهذا ما يحدث في رأسي. 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 هذا واضح وصريح جدا، إذا أقول الباحث ك، إنشاء صندوق يسمى ك. 210 00:10:48,670 --> 00:10:52,040 إذا قلت ك يساوي 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 إذا قلت كثافة * 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 يحصل على عنوان ك. 228 00:11:44,930 --> 00:11:52,867 لذلك أنا التمسك حيث يعيش ك في الذاكرة، عنوانه، وعنوان بايت لها. 229 00:11:52,867 --> 00:11:55,200 كل ما أفعله هو أنني أقوله أن القيمة هي ما أنا ذاهب 230 00:11:55,200 --> 00:11:59,430 لوضع داخل بلدي مربع يسمى كيه. 231 00:11:59,430 --> 00:12:02,080 ولأن هذه الأمور مؤشرات، ولأن النظر 232 00:12:02,080 --> 00:12:04,955 في سلسلة مثل الصفر س ثمانية صفر ج سبعة أربعة ثمانية 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 يعطينا المعلومات نحن بحاجة للعثور ك في الذاكرة. 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 حيث يعيش ك. 241 00:12:31,390 --> 00:12:34,360 وهذا أمر مهم حقا لأنه بمجرد نعرف أين يعيش ك، 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 كان ذلك أن الصفر العاشر ثمانية الاشياء الصفر يدور، وكان ذلك عنوان الذاكرة. 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 يحصل على عنوان ك، كما سنرى ماذا يعني ذلك، 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 is- تذكر، ويجري لاستخراج عنوان الشيء على اليمين. 318 00:16:39,810 --> 00:16:45,350 ومنذ مؤشر هو مجرد عنوان، من وx هو مؤشر إلى عدد صحيح 319 00:16:45,350 --> 00:16:48,560 القيمة التي هي المكان في الذاكرة س الأرواح. 320 00:16:48,560 --> 00:16:50,460 انها عنوان إكس. 321 00:16:50,460 --> 00:16:53,296 لذلك و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 إذا آر هو مجموعة من الزوجي، ثم وقوس مربع آر الأول هو مؤشر 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 ثم ARR قوس مربع i غير العنصر الأول عشر من هذا الصفيف، 329 00:17:19,069 --> 00:17:29,270 و & آر قوس مربع ط هو المكان في ذاكرة عنصر ط عشر من آر موجودا. 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 ودعا الباحث مجموعة و وظيفة تسمى مجموعة تعيين. 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 تعلمون أنه عندما لك- الدعوة إلى مجموعة كثافة العمليات لا تفعل شيئا على نحو فعال. 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 >> طيب حتى الآن لدينا كل هذه الحقائق، دعونا نستمر، والحق. 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 وهذا ما يسمى dereferencing. 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 ثم يمكننا القول * الكمبيوتر و* الكمبيوتر هو اسم ما سنجد إذا ذهبنا 370 00:19:40,610 --> 00:19:42,910 إلى الكمبيوتر العنوان. 371 00:19:42,910 --> 00:19:47,860 ما سوف نجد هناك هو شخصية و * جهاز كمبيوتر هو كيف يمكننا الرجوع إلى البيانات في ذلك 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، إذا قلنا * جهاز كمبيوتر = 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 وسنرى قليلا في وقت لاحق شيء آخر أيضا. 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 ما رأيك يحدث إذا حاولنا وdereference 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 حتى إذا حاولت وdereference لا شيء أو الذهاب إلى أي شيء عنوان، 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 إذا حاولت وdereference مؤشر فارغة، 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 لذلك كنت أقول الباحث س؛ لم تكن في الواقع إسناد ذلك إلى أي شيء 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 عندما تقوم بتعريف مؤشر الباحث * 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 >> ماذا لو حاولت أن تفعل dereference بعض العناوين التي don't- هناك 428 00:22:40,570 --> 00:22:43,410 بايت والمعلومات في بالفعل هناك، وهذا هو الآن في المؤشر. 429 00:22:43,410 --> 00:22:47,470 إذا حاولت وdereference هذا المؤشر، هل يمكن أن العبث مع بعض الذاكرة 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 والتي يمكنك بأمان dereference. 444 00:23:27,260 --> 00:23:32,240 >> لذلك دعونا نعود الآن ونلقي نظرة في بناء الجملة الشامل للوضع. 445 00:23:32,240 --> 00:23:37,400 إذا قلت كثافة * ص ؛، ماذا فعلت للتو؟ 446 00:23:37,400 --> 00:23:38,530 ما قمت به هو هذا. 447 00:23:38,530 --> 00:23:43,290 وأنا أعلم أن قيمة ص هو عنوان لأن كل المؤشرات هي فقط 448 00:23:43,290 --> 00:23:44,660 عناوين. 449 00:23:44,660 --> 00:23:47,750 يمكنني dereference ص باستخدام * المشغل. 450 00:23:47,750 --> 00:23:51,250 في هذا السياق هنا، في غاية أذكر يتصدر * هو جزء من النوع. 451 00:23:51,250 --> 00:23:53,510 الباحث * هو نوع البيانات. 452 00:23:53,510 --> 00:23:56,150 ولكن يمكنني dereference ص باستخدام * المشغل، 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 يمكنني dereference p و إذا أفعل، وسوف تجد عددا صحيحا 457 00:24:09,500 --> 00:24:11,920 في ذلك الموقع الذاكرة. 458 00:24:11,920 --> 00:24:14,260 >> موافق فقلت كان هناك آخر شيء مزعج مع النجوم 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 ليس هناك ويقول عادل كثافة العمليات خ، ذ، ض ؛. 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، واحدة تسمى ص، واحدة تسمى ض. 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 وهكذا إذا قلت كثافة * بكسل، الحمر، PZ، ما في الواقع الحصول على مؤشر إلى عدد صحيح 472 00:24:56,430 --> 00:25:01,650 دعا بكسل واثنين من الأعداد الصحيحة، السنة التحضيرية و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 والنجوم، ما أنا بحاجة فعلا القيام به هو القول الباحث * سنويا * للبرميل، * الكمبيوتر. 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 يعتمد على النظام، وإذا كنت تستخدم 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 وذلك عندما dereference يستخدم المشغل، 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 حتى انها في الاساس نحويا مطابقة لمن بعد أن قلت ك = 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 إذا قلت كثافة م، وإنشاء متغير جديد يسمى م. 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 إذا قلت م = 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