تعديل المتغيرات عبر المؤشرات
جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 27 من 63.
الآن يمكنك تسخير القوة الحقيقية للمؤشرات: تعديل المتغير original من خلال function. عند تمرير مؤشر إلى function، يمكن للدالة استخدام عامل إلغاء الإشارة لتغيير القيمة المخزنة في عنوان الذاكرة ذلك.
داخل الدالة، تقوم بإلغاء الإشارة إلى المؤشر باستخدام العامل * للوصول إلى قيمة المتغير original وتعديلها. تُسمّى هذه التقنية التمرير بالمرجع لأنك تمرّر مرجعًا إلى موقع المتغير في الذاكرة.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Dereference to modify the original value
}
int main() {
int x = 5;
doubleValue(&x); // مرر عنوان x
// x أصبح الآن 10!
return 0;
}يكمن المفتاح في استخدام *ptr على الجانب الأيسر من عملية الإسناد لتعديل القيمة الموجودة في عنوان الذاكرة الذي يشير إليه المؤشر. يتيح ذلك للدوال تغيير المتغيرات بشكل دائم من الدالة المستدعية، مما يفتح إمكانيات برمجية قوية لا يمكن لتمرير القيمة تحقيقها ببساطة.
التحدي
سهلاكتب برنامج C يوضّح تعديل variable من خلال المؤشرات، وذلك بإنشاء function تضاعف قيمة عدد صحيح ثلاث مرات.
يجب أن يقوم برنامجك بما يلي:
- إنشاء function باسم
tripleValueتأخذ مؤشراً إلى عدد صحيح كمعامل لها - داخل function
tripleValue، استخدم عامل إلغاء الإشارة لضرب القيمة الموجودة عند address في 3 - داخل function
tripleValue، اطبع القيمة الجديدة بالتنسيق التالي:Value tripled to: [value] - في function
main، صرّح عن variable عدد صحيح باسمnumberوابدأ قيمته بالقيمة 8 - اطبع القيمة الأصلية بالتنسيق التالي:
Original value: [value] - استدعِ function
tripleValueومرّر address الخاص بـ variable numberباستخدام عامل الحصول على العنوان - بعد استدعاء function، اطبع القيمة النهائية لـ
numberبالتنسيق التالي:Final value: [value]
يجب أن يوضّح الإخراج أن function تعدّل variable الأصلية بنجاح من خلال المؤشر:
Original value: 8
Value tripled to: 24
Final value: 24يوضّح هذا التحدي قوة التمرير بالمرجع باستخدام المؤشرات، حيث يمكن لـ function تعديل variable الأصلية بشكل دائم من خلال إلغاء الإشارة إلى المؤشر وتغيير القيمة الموجودة في موقع الذاكرة هذا.
جرّب بنفسك
#include <stdio.h>
// TODO: اكتب دالة tripleValue الخاصة بك هنا
int main() {
// TODO: اكتب الكود الخاص بك هنا
// أعلن وقم بتهيئة المتغير number
// Print the original value
// استدعِ دالة tripleValue
// اطبع القيمة النهائية
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت