أهلا ومرحبا بكم مرة أخرى.
نحن في قسم جديد. يسمى هذا المقطع المؤشرات.
ربما يكون هذا هو الجزء الأكثر أهمية في الدورة.
من المحتمل أيضًا أن يكون الجزء الأكثر صعوبة في الدورة. يعتبر مفهوم المؤشرات
و c مفهومًا خادعًا وصعبًا.
لكننا سنمر بها ببطء شديد.
سنقوم بإلقاء الكثير من المحاضرات خطوة بخطوة.
سنبدأ من أعلى مستوى ونخوض في المزيد والمزيد من التفاصيل.
عليك أن تفهم المؤشرات إذا كنت تريد الاستفادة الكاملة
من لغة c. لذلك من المهم جدا.
لذلك دعونا نبدأ من الأعلى ونتحدث عن مفهوم المراوغة هذا
، والذي هو في الأساس نفس مفهوم المؤشر.
لذا فإن المؤشرات تشبه إلى حد بعيد مفهوم المراوغة.
أنت تستخدم المراوغة في حياتك اليومية. على سبيل المثال ، إذا كنت
أصف ما يعنيه المراوغة ، فسيكون الأمر
كما لو كان عليك شراء شيء جديد ، منتج جديد في شركتك.
على سبيل المثال ، لنفترض أنه كان عليك شراء خرطوشة حبر جديدة لطابعتك.
إذا كنت تعمل في شركة كبيرة ، فإن ما ستفعله على الأرجح
هو أنك ستضطر إلى المرور عبر قسم معين لشراء
أي مشتريات جديدة. لذلك من المحتمل أن تذهب إلى قسم المشتريات.
من المحتمل أن تتصل بشخص ما في عملية الشراء
وتطلب منه طلب الخرطوشة الجديدة لك.
ستكون مهمتهم العثور بعد ذلك على متجر محلي
يوفر العنصر الفعلي الذي تريد طلبه.
وهذا يعني أنك لن تذهب وتطلب هذا العنصر بنفسك مباشرة.
أنت تطلب من شخص ما أن يفعل ذلك من أجلك.
وبعد ذلك من خلال خبرتهم ومعرفتهم بمن لديه
هذا المنتج في المخزون ، يعيدونه
إليك.
إذن هذا هو مستوى المراوغة بالنسبة لك. لا تمضي قدمًا وتذهب فقط
إلى المتجر وشرائه. تذهب إلى قسم المشتريات ، حيث
يعرف قسم الشخص أنه يعمل ويفعل كل شيء من أجلك.
هذا هو نفس مفهوم المؤشر في البرمجة.
في لغات البرمجة ، المراوغة هي القدرة على الإشارة إلى شيء ما باستخدام
اسم أو مرجع أو حاوية بدلاً من القيمة نفسها.
نستخدم شكلاً من أشكال التفاعل باستخدام أسماء المتغيرات.
لا نستخدم عنوان الذاكرة للوصول إلى البيانات.
نستخدم اسم متغير.
الشكل الأكثر شيوعًا للمراوغة هو فعل التلاعب بقيمة من خلال عنوان
الذاكرة الخاص بها.
لذلك بالإضافة إلى وصف صغير جدًا
للمراوغة باستخدام اسم متغير لتمثيل عنوان الذاكرة ، يمكنك أيضًا معالجة
قيمة من خلال عنوان الذاكرة الخاص بها باستخدام العنوان نفسه.
العنوان نفسه.
لذلك يوفر المؤشر وسيلة غير مباشرة للوصول إلى قيمة عنصر بيانات معين.
إنه متغير قيمته عنوان ذاكرة ، وهذا
أمر حيوي لفهمه.
لقد تعلمنا متغيرات حتى هذه النقطة تحتوي على أنواع معينة
من البيانات والأرقام والأحرف
والمضاعفات والعوامات بأرقام منطقية.
الآن سيكون لدينا متغير لا يخزن
أيًا من هذا النوع من البيانات.
نوع مخازن البيانات هو عنوان الذاكرة.
سيتم تمثيل عنوان الذاكرة كرقم صحيح ، رقم
سداسي عشري ، لكنه
سيظل عنوان ذاكرة.
لذلك ستكون قيمة العنوان
وموقعًا آخر للذاكرة إذا كان متغيرًا موجودًا أو
موقعًا جديدًا تخصصه ديناميكيًا.
لذا ، مثلما توجد أسباب تجعل من المنطقي الذهاب إلى قسم المشتريات
لطلب خراطيش جديدة ، لا يتعين عليك معرفة المتجر
المحدد الذي يتم طلب الخراطيش منه على سبيل المثال.
هناك أيضًا أسباب وجيهة تجعل من المنطقي استخدام المؤشرات
و c لاستخدام هذه المتغيرات التي تمثل عنوانًا وعنوان ذاكرة.
تحدثنا عن عناوين الذاكرة في بداية الدورة.
وكيف كلما قمت بتشغيل برنامج وإنشاء متغيرات يتم تخزينها في الذاكرة.
وهذه الذاكرة لها عنوان معين. يجب أن تعرف العنوان لاستعادة هذه البيانات
، تمامًا كما تحتاج إلى معرفة عنوان المنزل إذا كنت ستقود سيارتك في مكان ما أو عنوان
موقع ما.
لذا فإن استخدام المؤشرات في برنامجك هو أحد أقوى الأدوات المتوفرة في لغة c.
لهذا السبب من المهم أن نفهم.
أي برنامج موضوعي في c سيستخدم المؤشرات.
لذلك عليك أن تفهم هذا المفهوم.
وبالنسبة للمبرمجين الذين قاموا ببرمجة لغات
أكثر حداثة مثل جافا أو سي شارب ، فلا داعي
بالضرورة للقلق بشأن هذا
لأن كل تخصيص الذاكرة وليس هناك مفهوم
حقيقي للمؤشرات.
على الرغم من أن جافا تستخدم
المؤشرات لأنها تحتوي على نسخ من المراجع.
إنه نفس النوع من المفهوم. لكن في c ، لديك بشكل
صريح متغير يمثل العنوان.
تعتبر المؤشرات أيضًا من أكثر المفاهيم المربكة للغة سي.
يميلون إلى إساءة معاملتهم
، فهم لا يفهمون تمامًا ، خاصة من قبل المبرمجين الجدد.
لذلك من المهم أن تحصل على هذا المفهوم في البداية
وأن يكون لديك فكرة واضحة عما يحدث أثناء الانتقال
إلى مفهوم المؤشرات الأكثر تقدمًا والأكثر تقدمًا.
لذلك إذا لم تفهم هذا في البداية ، ادرس
، ادرس ، تدرب على كتابة الكود باستخدام المؤشرات.
يجب أن يعرف المترجم نوع البيانات المخزنة
في المتغير الذي يشير إليه. لذلك فهو يشبه المتغير العادي
ويجب عليك تحديد نوع البيانات عند إنشاء المؤشر.
السبب الذي يجعل المترجم يحتاج إلى معرفة هذا هو نفس سبب المتغيرات ، فهو يحتاج
إلى معرفة مقدار البيانات التي يجب تخصيصها حتى إذا كنت تشير إلى بعض البيانات.
سيتم ربط كل مؤشر بنوع متغير معين.
يمكن استخدامه فقط للإشارة إلى متغيرات من هذا
النوع ، وسنقدم مثالاً على ذلك عندما نتحدث عن تحديد مؤشر.
لذلك ، على سبيل المثال ، يمكن أن تشير
مؤشرات نوع المؤشر إليه فقط إلى متغيرات من النوع int.
مرة أخرى ، المتغير له
قيمة عنوان ، وهذا مؤشر.
قد يحتوي هذا العنوان على قيمة في مكان ما في الذاكرة.
يمكن أن تشير مؤشرات مؤشر النوع إلى عائم فقط إلى متغيرات من نوع عائم.
إذن هذه فكرة توضيحية
تعطيك مفهوم المؤشر.
لا تقلق بشأن بناء الجملة هنا.
لقد ناقشناها بإيجاز في المحاضرات السابقة هذه علامة العطف وهذه العلامة النجمية
لا داعي للقلق بشأن ذلك بالضرورة. ما أريدك أن تنتبه إليه
هنا هو كيفية وجود عنوان للمؤشر ، ويمكن أن يحتوي هذا
العنوان على قيمة ولكن في مكان آخر في الذاكرة.
في هذا المثال ، نقوم بإنشاء رقم عادي ، أنشأناه
مليون مرة ، ثم ترى هذا التركيب مع علامة النجمة التي تشير
إلى أنه مؤشر. سنستعرض ذلك بالتفصيل.
يمكنك أيضًا رؤية علامة العطف ، مما يدل على أنه عنوان.
لذلك في هذا المثال ، عندما نقوم بإنشاء هذا المؤشر من النوع int p number
، فإننا نخصص عنوانًا. لأن تذكر ، يمكن للمؤشرات تخزين العناوين فقط.
وكيف يتم وضع هذا بالفعل في الذاكرة
هو أن لديك رقم اسم متغير
، ورقم له قيمة 99.
رقم له عنوان أيضًا في الذاكرة.
هذا العنوان في الذاكرة هو قيمة المؤشر.
إذن الرقم p هو مؤشر يشير إلى العنوان 1008.
1008 لها قيمة 99 ، وتحتوي على الرقم
المتغير أيضًا.
إذن هذا هو ما نصل إليه حقًا. إذا لم يكن هذا واضحًا ، فأنت بحاجة إلى النظر
في هذا لمدة ساعة والتأكد من فهمك له.
مرة أخرى ، النقطة هي أن المؤشر له قيمة بالنسبة
إلى العنوان ، وهذا ما يخزنه.
وبعد ذلك يمكنك بالفعل الوصول إلى القيمة الموجودة في هذا العنوان باستخدام صيغة معينة.
فلماذا نستخدم المؤشرات ، ولماذا نتطرق إلى هذا المفهوم ، ولماذا لا
يمكننا فقط استخدام أنواع البيانات
الحالية التي نستخدمها ونستخدمها عندما نريد استخدام السلاسل.
حسنًا ، الوصول إلى البيانات عن طريق المتغيرات فقط أمر محدود للغاية.
باستخدام المؤشرات ، يمكنك الوصول إلى أي موقع ، ويمكنك التعامل مع أي موضع للذاكرة
كمتغير على سبيل المثال ، ثم يمكنك إجراء العمليات الحسابية باستخدام
المؤشرات أيضًا مما يجعل الأمور أسهل.
تسهل المؤشرات الموجودة في c استخدام المصفوفات والسلاسل
النصية ، وسنستعرض ذلك أيضًا ، وهذه ميزة أخرى لاستخدام المؤشرات.
تسمح لك المؤشرات بالإشارة إلى نفس المساحة والذاكرة مع مواقع متعددة.
ما يعنيه هذا هو أنه يمكنك تحديث الذاكرة في
مكان واحد ومن ثم يمكن رؤية التغيير من موقع آخر في برنامجك.
إنها طريقة من نوع استخدام البيانات العالمية ولكن لا تزال تحتوي على وظائف داخلية مغلفة.
يمكنك أيضًا توفير الكثير من مساحة الذاكرة من خلال القدرة على مشاركة المكونات في هياكل
البيانات الخاصة بك.
لذلك تذكر ، عندما تم اختراع c ، تم اختراع c في السبعينيات.
كانت فكرة c أن تكون فعالة للغاية وأن تكون منخفضة المستوى.
تعتبر فكرة الوصول إلى الذاكرة مباشرة عبر المؤشرات
فعالة للغاية ، كما
أنها سريعة جدًا.
تسمح المؤشرات أيضًا للوظائف بتعديل البيانات التي يتم تمريرها
عليها كمتغيرات. تم تمرير هذا عن طريق المرجع. سنقوم بإلقاء محاضرة حول هذا الموضوع.
هذا هو المكان الذي يمكنك فيه تمرير الوسيطات إلى دالة باستخدام المؤشرات.
ثم داخل الوظيفة ، عندما تقوم بتغيير تلك البيانات
، سينعكس التغيير خارج تلك الوظيفة.
لذلك لم يعد علينا استخدام البيانات العالمية.
يمكننا استخدام البيانات داخل دالة ، وتمرير تلك
البيانات كمؤشر ، ثم يتم تخصيص تلك البيانات
خارج تلك الوظيفة. لذلك ليس هناك عيب في استخدام المتغيرات
العالمية حيث كل شيء مرتبط بإحكام ، يمكنك قصر ذلك على البيانات
التي تحتاج فقط إلى الوظائف التي تحتاج إلى معرفة تلك البيانات.
كما ذكرت ، يمكن أيضًا استخدامه لتحسين البرنامج ليعمل بشكل
أسرع واستخدام ذاكرة أقل مما هو عليه
بخلاف ذلك ، وهو مفهوم مهم
، خاصة في برامج الوقت الفعلي المضمنة.
تتيح لنا المؤشرات أيضًا الحصول على قيم متعددة من دالة.
لقد تحدثنا عن وظائف حول كيفية تمرير وظائف البيانات.
لقد تحدثنا أيضًا عن كيفية إرجاع البيانات.
نعلم أنه يمكنك الآن إرجاع قيمة واحدة فقط من دالة.
ولكن إذا كنت تستخدم المؤشرات ، فيمكنك بالفعل إرجاع قيم متعددة من دالة.
وسوف نتحدث عن ذلك. هذه ميزة كبيرة.
سنتحدث أيضًا عن تخصيص الذاكرة الديناميكي.
في الوقت الحالي ، عندما نقوم بإنشاء ذاكرة لبرنامج ما ، يتم القيام
بذلك ضمنيًا بواسطة المترجم عندما تقوم بتعريف متغير.
إذا قمت بتعريف متغير int ، فإنه يقوم تلقائيًا بإنشاء 4 بايت لهذا المتغير على سبيل المثال.
عندما تستخدم المصفوفات وتحدد حجم المصفوفة
، يتم تخصيص هذا الحجم في وقت الترجمة.
لذا ، إذا كنت تحاول تخزين بيانات أكثر من ذلك ، فأنت في حالة
فساد ، فلن يعمل برنامجك.
ولكن إذا كانت لديك القدرة على إنشاء
أكبر قدر ممكن من الذاكرة في وقت التشغيل ، فسيكون
ذلك ضخمًا. والمؤشرات تتيح لك القيام بذلك.
أنها تسمح لك بإنشاء ذاكرة في وقت التشغيل الديناميكي ، وتخصيص الذاكرة.
سوف نتحدث عن كل هذا أيضًا.
تسمح لنا المؤشرات بتصميم وتطوير هياكل بيانات أكثر تعقيدًا.
وهيكل البيانات شيء يخزن البيانات.
من أمثلة هياكل البيانات تكديس إشارة أو قائمة مرتبطة.
ويمكننا إنشاء هذه الأشياء بشكل أسهل باستخدام المؤشرات.
توفر المؤشرات وصولاً مباشرًا إلى الذاكرة ، مرة أخرى ، وبسرعة.
لذلك ستكون المؤشرات مفهومًا كبيرًا. سيكون لدينا الكثير من المحاضرات حول المؤشرات.
أريدكم أن تركزوا ، وأريدكم أن تنتبهوا عندما أتحدث عن كل
هذه المفاهيم لأنها مهمة وحيوية لفهم لغة البرمجة c.
حسن الحظ ، ودعونا نبدأ. شكرًا لك.