أهلا ومرحبا بكم مرة أخرى. في هذه المحاضرة أريد أن أتحدث عن حساب النقاط.
الآن بعد أن فهمنا العلاقة بين المصفوفات والمؤشرات
، سيكون هذا المفهوم أسهل في الفهم.
نقول حسابيًا ، لكننا لا نقول ذلك حقًا
- كل ما يعنيه ذلك حقًا هو أنه يمكنك إجراء
زيادة أو ناقص أو زيادة أو إنقاص على المؤشر نفسه.
لذا فإن القوة الحقيقية لاستخدام المؤشرات في المصفوفات تلعب دورها عندما
تريد التسلسل عبر عناصر المصفوفة.
تريد الانتقال من العنصر الأول إلى النهاية ، وتريد التكرار من خلاله.
هذه هي مؤشرات القوة الحقيقية. نظرًا لأن نقطة المؤشرات تستخدم
العناوين ، فإن كل عنصر في المصفوفة هو مجرد عنوان آخر.
لذا يمكنك فقط إجراء علامة الجمع على المؤشرات ويمكنك الانتقال إلى العنوان التالي.
حتى هنا يمكن استخدام مؤشر القيم للوصول إلى أول عدد صحيح
من مجموعة القيم.
يمكن استخدامه للوصول إلى القيم الفرعية 0.
لذلك إذا كنت تتذكر القيم ، فإن المؤشر هو مؤشر يشير
إلى مصفوفة عدد صحيح.
وقمنا بتعيينه للعنصر الأول في المصفوفة بمجرد تعيين المؤشر لاسم المصفوفة.
يمكننا أيضًا استخدام عنوان المشغل الفرعي 0 إذا أردنا ذلك.
ولكن عندما نقوم بإرجاع مؤشر القيم لأنه
يشير إلى العنصر الأول في المصفوفة ، فإنه
سيعطيك أول عدد صحيح في مصفوفة القيمة sub-0.
إذا كنت ترغب في الإشارة إلى القيمة الفرعية
3 عبر متغير المؤشر ، فكل ما عليك فعله هو إضافة 3 إلى مؤشر القيم ثم تطبيق عامل
المراوغة لإلغاء الإشارة إليها.
لذا يمكنك أن تفعل شيئًا كهذا. يمكنك قول مؤشر القيم زائد 3 ثم قم بإلغاء
الإشارة إليه بعلامة النجمة.
وعادة ما تضع علامة النجمة خارج علامات الاقتباس لتوضيح ذلك.
لكن ما يفعله هذا هو قول مؤشر القيم
، وهو عنوان العنصر الأول في المصفوفة ، ويضيف 3 إليه.
وبالتالي ، فإنها ستجمع لكل بايت للأعداد الصحيحة ، وستضرب
البايت في الأعداد الصحيحة.
لكن هذا سيشير بشكل أساسي إلى العنصر الفرعي
3 ، العنصر الرابع في المصفوفة.
لذلك في تعبير قيم النجمة بالإضافة إلى مؤشر i الذي يمكن
استخدامه للوصول إلى أي قيمة موجودة في مصفوفة القيم.
لذلك إذا فهمت هذا التعبير ، يمكنك إضافة أي شيء إلى i وسيوجهك
إلى مصفوفة عناصر محددة.
لذا ، إذا كنت تريد تعيين القيمة من 10 إلى 27 ، فكل
ما عليك فعله هو إذا كنت تستخدم مؤشرًا فقل
مؤشر القيم زائد 10 ثم قم بإلغاء الإشارة إليه وقل يساوي 27.
لذلك ترى الصيغة المختلفة هنا.
مرة أخرى ، إنها ملاءمة تدوينية ولكنها أيضًا أكثر كفاءة من حيث البرنامج نفسه.
المؤشرات نظرًا لأنها مرتبطة ارتباطًا وثيقًا بالمصفوفات
، يمكنك الوصول بسهولة إلى العناصر بمجرد زيادة المؤشرات
المتناقصة أو إضافة قيم أو طرح قيم من مؤشر.
مفيد جدا جدا.
لتعيين مؤشر القيم للإشارة إلى العنصر الثاني في صفيف القيم ، يمكنك
تطبيق عامل تشغيل العنوان على القيمة الفرعية 1 وتعيين مؤشر النتائج إلى القيم.
لقد رأينا هذا. هذه مجرد طريقة أخرى للقيام بنفس الشيء الذي ذكرته سابقًا
إذا كنت تريد استخدام عامل التشغيل الفرعي للعنوان.
يمكنك دائمًا القيام بذلك إذا
كنت تريد ذلك ، ولكن من الأنسب إجراء حساب المؤشر.
إذا كان مؤشر القيم يشير إلى القيمة sub-0
، فيمكنك تعيين نقطة قيم واحدة عن طريق إضافة واحدة إلى
مؤشر قيمة القيم. وهذا حقًا ما وصلنا إليه بحساب النقاط.
كل ما عليك فعله هو أن تقول أن القيم تشير إلى أو أن زائد
يساوي واحدًا ، والآن يشير مؤشر القيم إلى العنصر الثاني في المصفوفة
أو الفهرس الأول.
تدوين لطيف للغاية ، من السهل جدًا القيام به.
إذن ، هذا تعبير صالح تمامًا في c ويمكن
استخدامه للمؤشرات إلى أي نوع بيانات سواء كان عددًا
صحيحًا أو أي شيء. وربما يجب أن تفكر في مدى فائدة ذلك في الشخصيات.
إذا كان لديك مؤشر حرف ، يمكنك الآن الوصول إلى كل
عنصر ، كل حرف في سلسلة بمجرد القيام بعلامة الجمع على مؤشر.
تعتبر معاملات الزيادة والنقصان زائد وسالب ناقص
مفيدة بشكل خاص عند التعامل مع هذه المؤشرات
لأنك سترغب عادةً في الانتقال من عنصر إلى آخر وما إلى ذلك.
ليس من الشائع أن تضيف 22 أو ناقص 20 لأنك
عادة ما تضيف على التوالي.
لذا فإن استخدام عامل الزيادة في المؤشر له نفس تأثير إضافة واحد إلى المؤشر.
استخدام عامل التناقص له نفس تأثير طرح واحد من المؤشر.
لذا فإن قول مؤشر قيم زائد سيؤدي إلى تعيين
مؤشر القيم الذي يشير إلى العدد الصحيح التالي في مصفوفة القيم.
يجب أن يكون علامة الطرح ناقص مؤشر القيم سوف يقوم بتعيين
مؤشر القيم الذي يشير إلى العدد الصحيح السابق في مصفوفة القيم.
لكنك تريد توخي الحذر عند إجراء الطرح الناقص
لأنك تريد التأكد من أنك على الأقل في المصفوفة وأنك لست عند 0.
والشيء نفسه ينطبق على زائد زائد.
إذا كنت في نهاية المصفوفة ، فأنت لا تريد أن يكون لديك أي أخطاء خارج الحدود.
لذا تأكد من أن مؤشر القيم إذا كنت تقوم بإنقاصه ،
فإنه لم يكن يشير إلى بداية مصفوفة القيم في البداية.
مثال آخر هنا حيث سنقوم
بالفعل بجمع جميع العناصر في المصفوفة ،
ترى أن لدينا دالة مجموع مصفوفة وأن
الدالة تأخذ مصفوفة كما أنها
تأخذ عددًا صحيحًا ثابتًا كمعلمات.
داخل الدالة ، سننشئ عددًا صحيحًا.
سنقوم بتهيئة هذا المجموع الصحيح إلى 0 ، وسنقوم بإنشاء مؤشر عدد
صحيح ، مؤشر إلى النوع int.
سنقوم أيضًا بإنشاء مؤشر
ثابت.
إذن ما يعنيه ذلك هو أنه لا يمكنك تغيير عنوانه.
ستكون دائمًا مصفوفة زائد ن وستسمى نهاية المصفوفة.
نحن نقوم بذلك لأنه يجعل الحلقة الخاصة بنا أكثر كفاءة إذا قمنا بإعدادها
للانتقال إلى نهاية الصفيف والنظر فقط إلى المؤشر.
لذا تشير نهاية المصفوفة إلى عنوان نهاية المصفوفة.
يمكننا أن نقول المصفوفة ، وهي ما يتم تمريره ثم n هو
حجم المصفوفة
وحجمها.
الآن ستقوم حلقة for بتهيئة مؤشر متغير التحكم في الحلقة
، وهو مؤشر إلى المصفوفة. وكل ما عليك فعله هو إذا كنت
تريد تعيين مؤشر للعنصر الأول من المصفوفة ، فكل ما عليك فعله هو أن
تقول المؤشر يساوي مصفوفة.
ومن ثم فإن شرط خروج الحلقة لدينا هو إذا كان المؤشر أقل من نهاية المصفوفة.
تذكر أن المؤشر هو عنوان ونهاية المصفوفة هي أيضًا عنوان.
لذلك نقول إذا كان العنوان في المؤشر أقل من المؤشر n ،
فإننا نريد تنفيذ جسم الحلقة.
المؤشر هو مجرد عدد صحيح ، إنه عنوان سداسي عشري.
في كل مرة نزيد ، ينتقل إلى العنوان التالي. لدينا عنوان النهاية ، لذا يمكننا
القول مر عبر الحلقة حتى نصل إلى النهاية.
ثم نقوم بزيادة المؤشر نفسه ، والذي سيزيد
العنوان للانتقال إلى العنصر التالي في المصفوفة لأن
هذا هو ما نشير إليه.
ثم لدينا داخل جسم الحلقة ، نقول مجموع زائد يساوي المؤشر.
نقوم بإلغاء إشارة المؤشر للحصول على القيمة
لأننا نتذكر أننا نريد الحصول على القيمة التي لا نريد الحصول على
عنوان المؤشر أو عنوان المؤشر الذي يشير إليه.
ثم في النهاية ، نعيد المجموع. هذا سوف يجمع كل العناصر
في المصفوفة.
ستلاحظ ، بشكل رئيسي ، أننا قمنا أيضًا بإعلان الوظيفة هناك
بدلاً من الجزء العلوي من الملف. عادةً ما أرغب في وضعها في أعلى الملف.
لكن بشكل أساسي ، ننشئ مصفوفة من 10 عناصر ، 3 7 سالب 9 وهكذا.
ثم نمرر المصفوفة أو المجموع ، ونحدد
الحجم على أنه 10.
وما ستلاحظه هو أنها تُرجع القيمة وهي مجموع المصفوفة.
لذلك من الجيد جدًا استخدام هذه النقطة الحسابية للتكرار عبر مصفوفة
، يمكننا فقط إضافة العنوان
التالي وإلقاء نظرة أيضًا على عنوان النهاية للقفز.
يكون هذا أكثر فاعلية عندما ينظر المؤشر إلى عنوان النهاية
بدلاً من العداد الذي ينظر إلى أقل من n.
وتلاحظ أيضًا أننا أنشأناها على هيئة ثوابت لأن الثوابت لا تتغير
ويكون ذلك أكثر فاعلية مع المترجم.
المصفوفة هنا عبارة عن مؤشر ثابت يعني أن العنوان لا يمكن تغييره.
يجب أن تكون قد لاحظت أيضًا في هذا
المثال أنه لتمرير مصفوفة إلى دالة ، يمكنك ببساطة تحديد اسم المصفوفة.
لذلك نعرف كيف نمرر الدالة المرفوعة. ولإنتاج مؤشر إلى مصفوفة ، ما عليك
سوى تحديد اسم المصفوفة.
لقد رأينا ذلك عندما قمنا بتعيين العنصر الأول من المصفوفة إلى مؤشر.
ما يعنيه هذا هو أن استدعاء دالة مجموع مصفوفة
ما تم تمريره إلى الدالة كان في الواقع مؤشرًا لقيم المصفوفة.
وهذا يخبرك حقًا أن المصفوفات والمؤشرات مرتبطة ارتباطًا وثيقًا جدًا
، وأن المصفوفة ليست أكثر من مؤشر.
وهذا يفسر سبب قدرتك على تغيير عناصر المصفوفة من داخل دالة.
لأنه حتى هذه النقطة ، عندما تمرر البيانات إلى دالة ، لا يتم تغيير
تلك البيانات خارج هذه الوظيفة ما لم تكن مؤشرًا.
لأن هذا هو السبب في أننا يجب أن نمرر العنوان للمسح الضوئي.
الطريقة الوحيدة لتغيير العناصر خارج الوظيفة هي إذا
كنت تقوم بتمرير المؤشرات إلى دالة.
ونظرًا لتعديل العناصر داخل تلك الوظيفة ، فهذا
يعني أنك تقوم بتمرير مؤشر.
وهذا يثبت مرة أخرى أنه عندما تكون
المصفوفات والمؤشرات متشابهة جدًا ، فإن المصفوفات هي في الواقع مؤشرات تستخدم
بناء جملة مختلفًا.
سوف نتحدث عن كيف يمكننا المرور عن طريق المرجع أو بالفعل
تمرير نسخة من المرجع ، مما سيسمح لك
بتغيير البيانات في وظيفة خارج هذه الوظيفة.
إذا كنت تتذكر من أحد تحدياتنا السابقة
، فكلما أردنا تغيير البيانات في إحدى الوظائف ، كان علينا
استخدام متغير عالمي.
لأننا لم نفهم مفهوم المرور
بالمرجع ولم نفهم مفهوم المؤشرات.
لكنني ذكرت سابقًا أن إحدى مزايا المؤشرات هي أنه
يمكنك الآن تغيير البيانات داخل دالة وستنعكس خارج هذه الوظيفة.
لكن هذه محاضرة أخرى.
لكن هذا المفهوم في حد ذاته بسبب المثال السابق يوضح كيف أن المصفوفات
هي في الأساس مؤشرات.
لذلك قد تتساءل عن سبب عدم الإعلان عن المعلمة الرسمية داخل الوظيفة كمؤشر.
حسنًا ، يمكن أن يكون. يمكننا فقط القيام بشيء مثل هذا ، مصفوفة int ، مصفوفة نجمية int.
لا نحتاج إلى إعلان ذلك كمصفوفة.
إنه صالح تمامًا لأن المصفوفات والمؤشرات هي نفسها التي يمكننا أن نقولها عن مصفوفة النجوم.
ذكرنا أنهم مرتبطون ارتباطًا وثيقًا حقًا.
لذلك يمكنك إعلان نوع المصفوفة على أنه نوع من مصفوفة ints
داخل دالة مجموع المصفوفة أو يمكنك تعريفها كمؤشر لـ int.
ولهذا السبب ترى العديد من الدوال التي تقبل المصفوفات كمعلمات أو كوسيطات
حيث تكون المعلمات في الواقع مؤشرات.
لذلك إذا كنت ستستخدم أرقام الفهرس للإشارة إلى عناصر المصفوفة التي تم تمريرها
إلى دالة ، فقم بتعريف المعلمة كمصفوفة.
مرة أخرى الملاءمة الترميزية ، إنها مجرد طريقة مختلفة
للتدوين ، إما باستخدام الأقواس والمنخفضة أو باستخدام مؤشر.
عادةً ما يكون من الأسهل قراءة المصفوفة نفسها
من حيث صيانة البرنامج ، فهي تعكس بشكل أكثر دقة استخدام المصفوفة بواسطة الوظيفة.
لكن المؤشر أسهل في الاستخدام.
وإذا كنت تستخدم وسيطة كمؤشر للمصفوفة ، فصرّح أنها من نوع المؤشر
في المعلمة الرسمية.
هذا مثال مع تدوين المؤشر للدالة حيث كان المثال
السابق يستخدم تدوين المصفوفة.
هنا نقول فقط إن مصفوفة البداية
int وما ستلاحظه هو أن الوظيفة تصبح أصغر كثيرًا على
الفور ، لأنه لا يتعين علينا تعيين المؤشر إلى المصفوفة للعنصر
الأول كما فعلنا.
تصبح الحلقة أيضًا أصغر كثيرًا لأننا لسنا بحاجة إلى
القيام بهذا الواجب في العبارة الأولى.
يمكننا أن نقول فقط حتى تصبح المصفوفة أقل من نهاية المصفوفة ويمكننا
زيادة المصفوفة. لذا فهو رمز أقل قليلاً ، ولا
يزال من الواضح جدًا ما الذي يحدث إذا فهمت المصفوفات والمؤشرات.
نحن نمرر في مصفوفة النجوم int ، ولا يتعين
علينا تهيئة هذه المصفوفة بعد الآن لأننا نمررها في المؤشر
، ولم نعد نهيئ المؤشر بعد الآن.
ثم نقوم بالفعل بتعيين عنوان نهاية المصفوفة
على مؤشر ثابت ، نهاية
المصفوفة. نستخدم ذلك للخروج من
الحلقة ، ونقول فقط sum plus يساوي star array ، باستخدام
عامل المراوغة لإرجاع المصفوفة مرة أخرى ، وإرجاع المجموع.
ومن ثم فإن الوظيفة الرئيسية هي نفسها تمامًا باستثناء أن الإعلان أصبح الآن مؤشرًا على عكس المصفوفة.
إذن ، هناك مثالان يستخدمان تدوينًا مختلفًا ولكن يوفران نفس الوظيفة
وهذا هو السبب في أنك ترى الكثير من المؤشرات كمعلمات داخل
معلمة دالة.
لذا لتلخيص بعض الأشياء الصحيحة عند استخدام المؤشرات
والأشياء غير الصالحة.
لذلك إذا أعلنا عن بعض المتغيرات هنا ، فإننا نعلن عن مصفوفة تسمى
كسب وتحتوي على 3 عناصر ثم نعلن عن مؤشرين.
الآن في هذه المؤشرات ، يمكننا إجراء العمليات الحسابية. يمكننا أن نقول المؤشر واحد زائد زائد.
يمكننا القول أن النقطة أو 2 تساوي النقطة أو واحد زائد 2.
يمكننا حتى أن نقول أن المؤشر 2 يساوي كسب زائد واحد.
من الصحيح تمامًا القيام بذلك لأن لديك مؤشرات وتقوم بتعديل المؤشرات حسب العنوان
، لذا يمكنك إجراء حساب النقاط.
لا يمكنك حساب النقاط على المصفوفات. لذلك لا يمكنك القول كسب زائد زائد.
لا يمكنك نطق المؤشر 2 0. 2 زائد 0. 1 لأن هذه
عناوين.
وأنت لا تشير في الواقع إلى أي
شيء داخل المصفوفة.
ولا يمكنك مضاعفة كسب نقطة أو نقطة واحدة للحصول على نقطة أو 2.
هؤلاء باطلون.
لذا انتبه إلى الصيغة الصحيحة لحساب المؤشر وافهم
أيضًا أن حساب النقاط لا يمكن تطبيقه إلا على المؤشرات ، وليس
المصفوفات.
تستخدم أيضًا الدوال التي تعالج المصفوفات المؤشرات كوسيطات.
لديك خيار بين تدوين المصفوفة وتدوين المؤشر لكتابة
وظائف معالجة الصفيف.
لذلك إذا كنت ستعالج وظيفة عشوائية ، فمن الجيد تمامًا استخدام مؤشر كمعامل.
يمكنك اختيار أي واحد تريد استخدامه.
لكن استخدام المؤشرات عادةً ما يكون رمزًا أقل وأكثر كفاءة.
إن استخدام تدوين المصفوفة يجعل الأمر أكثر وضوحًا أن الوظيفة تعمل مع
المصفوفات وأن تدوين المصفوفة له مظهر مألوف أكثر للمبرمجين الذين
لديهم بعض خلفية البرمجة بلغات معينة.
لذلك إذا قمت بالبرمجة من قبل و Fortran و Pascal وما إلى
ذلك ، يمكنك استخدام تدوين السهم.
قد يكون المبرمجون الآخرون أكثر اعتيادًا على التعامل مع المؤشرات وقد يجدون أن
تدوين المؤشر أكثر طبيعية ، ولكنه أكثر منطقية.
إنها أقرب إلى لغة الآلة باستخدام حساب النقاط
وتدوين المؤشر مع بعض المجمعين يؤدي إلى كود أكثر كفاءة ، وهو سبب آخر
لاستخدامه.
لذلك دعونا نلقي نظرة على هذه الأمثلة داخل كتل التعليمات
البرمجية.
إذن هذا مثالنا من الشرائح. لدينا إعلان الوظيفة الخاص بنا في السطر 3.
إنه مجموع مصفوفة.
وفي هذا المثال ، سنستخدم ترميز المصفوفة.
لذلك سنستخدم الأقواس عندما نستخدم الفهارس.
وسوف نسميه بالمرور في مصفوفة
القيم ثم تمرير الحجم.
لذا فإن دالة مجموع المصفوفة تأخذ مصفوفة عدد صحيح. حسنًا ، أول شيء عليك فعله هو
إنشاء المؤشر الذي تريد استخدامه لحساب النقاط
في السطر 14. ثم يتعين عليك تعيين نهاية المصفوفة
لمصفوفة العنوان بالإضافة إلى الحجم.
هذه هي نهاية المصفوفة ، والتي يمكنك استخدامها الآن للخروج من الحلقة.
لكن علينا تعيين المؤشر إلى المصفوفة.
نعلم أنه يمكننا تعيين مصفوفات لمؤشرات للإشارة
إلى العنصر الأول بمجرد استخدام اسم المصفوفة.
ليس علينا استخدام عنوان الناشط.
يمكننا إذا أردنا فعل شيء كهذا.
وهذا جيد أيضًا.
ثم نجمع زائد المؤشر. نحن نقوم بزيادة المؤشر لأن كل ما يفعله
يتم زيادته إلى العنوان التالي. إنه يشير إلى العنصر التالي في المصفوفة.
ثم في السطر 18 ، نلغي الإشارة إلى المؤشر لحساب المجموع ، مجموع
يساوي ، مجموع زائد قيمة المؤشر الذي يشير إليه.
لذلك إذا قمنا ببناء هذا ، فلدينا تحذير واحد ، وهو تحذير
رئيسي وليس عدد صحيح ، نريد تغيير هذا لأنه
من الجيد إرجاع قيم الخطأ من الرئيسي ونقول
فقط إرجاع 0.
يمكنك العودة إذا كان هناك خطأ رئيسي
، يمكنك إرجاع واحد سلبي. الآن نقوم بتشغيل هذا ، سترى أنه يؤدي فقط مجموع
القيم في المصفوفة ، وهي 3 زائد 7 زائد سالب 9 وهكذا ، لست متأكدًا
حتى من ذلك ، لكن يبدو أنه 21.
الآن يمكننا بسهولة تعديل معلمة المصفوفة هذه لأخذ
مؤشر بمجرد إعلان العلامة النجمية قبل المؤشر.
نسميها بنفس الطريقة. نحن فقط نعدل. لا نحتاج إلى إعلان المؤشر
بعد الآن. ربما نريد تغيير الاسم لتسهيل
الأمر ، لكننا لسنا بحاجة إلى إعلان هذا المؤشر بعد الآن.
ما زلنا نريد الحصول على نهاية المصفوفة
ولسنا بحاجة إلى تعيينها بعد الآن.
يمكننا فقط الحصول على شيء فارغ هناك. وقد يكون من المفيد أن يكون لديك حلقة while loop هنا.
ولكن إذا لم يكن لدينا مهمة ، فيمكننا وضع الفاصلة المنقوطة هناك.
والآن نحن بخير. ما زلنا نريد حذفه وما زلنا نريد إعادته.
ولكن إذا قمنا ببناء
هذا ، فنحن نريد التأكد
من تعريف إعلان الوظيفة كمؤشر لأننا قمنا بتغييره.
ويمكن أن يكون هذا أي اسم ولكننا سنكون متسقين.
الآن نحن نبني نريد التأكد
من أننا نستخدم مرة أخرى جميع المتغيرات التي
قمنا بتغييرها.
الآن قمنا ببناءها بنجاح وقمنا بتشغيلها وترى
أنك تحصل على نفس النتيجة وهي 21.
لذا افهم هذا الاختلاف بين استخدام المؤشرات كمعلمات رسمية في المصفوفات
، يمكنك استخدامها
بالتبادل. انها مجرد وسيلة راحة.
لكن عادةً ما يكون لديك رمز أقل ، عند استخدام مؤشر.
ويمكنك التلاعب به أكثر ويمكنك القيام بأشياء أكثر قوة ، وعادة
ما يكون أكثر فاعلية بناءً على المترجم. شكرًا لك.