أهلا ومرحبا بكم مرة أخرى. في هذه المحاضرة ، أرغب في تقديم
عرض توضيحي لتحدينا السابق الذي
كان فهم المرور بالمرجع ، وجود
معلمة داخل دالة تأخذ مؤشرًا.
لذلك دعونا ننشئ مشروعًا جديدًا. سوف نسمي هذا المؤشر بالرجوع
إليه لأن هذا هو ما يوضحه ، الأشياء الأساسية
هنا ، مشروع جديد ، تطبيق وحدة التحكم
ج. بسيط جدا هنا.
دعنا فقط نسمي هذا المؤشر التمرير
بالمرجع.
مرة أخرى ، توضيح كيف يمكننا استخدام المعلمات داخل دالة لتمرير
البيانات وكيف سيتم تعديل هذه البيانات بعد ذلك
خارج الوظيفة.
لذا فإن أول شيء سنفعله هو أننا سننشئ إعلان الدالة ،
نموذج الدالة. من الجيد دائمًا القيام بذلك
حتى تتمكن من الاتصال بأي مكان في برنامجك. سنسميها مربعة فقط.
الشيء الرئيسي في إعلان الوظيفة هذا هو أنها ستتخذ مؤشرًا.
لذلك ، سيأخذ مؤشر النهاية فقط ، لذلك سنقول فقط int star
ثم يمكنك إعطائه أي اسم تريده وتنتهي بفاصلة منقوطة.
وظيفتنا الرئيسية ، أولًا
سنقوم بها هي أننا سننشئ متغير عدد صحيح منتظم
وسنقول فقط int num ونقول فقط الكود الثابت لـ 9.
وما سنفعله هو أن نسمي دالة التربيع.
لن تقوم دالة التربيع الخاصة بنا بإرجاع أي بيانات ، ستكون باطلة.
علينا أن نمرره عنوانًا الآن لأن دالة التربيع في السطر 4 تأخذ مؤشرًا.
لذلك لا يمكننا تمرير num ، فعلينا أن نمرر عنوان num ،
ثم ننهيها بفاصلة منقوطة. لذلك نسمي الدالة باستخدام
اسم الوظيفة ثم نمرر عنوان المتغير.
لأن المتغير الموجود هنا في السطر الثامن ليس مؤشرًا.
ثم يمكننا طباعة قيمة الأسطوانات بشكل أساسي.
ومرة أخرى ، ما ستلاحظه هنا هو أننا نقوم بتمرير العنوان
، إذا قمنا بتغيير البيانات في الوظيفة نفسها لهذا المتغير
، فسوف يتغير خارجها. سنقول هنا أن مربع الرقم
المعطى هو ، ونقول فقط النسبة المئوية d ، سنضيف
خط تغذية وسنقوم فقط بطباعة
num ، ولن يكون num 9.
، سأخبرك بهذا القدر.
ثم نعيد 0 إلى الدالة العادية.
لذا علينا الآن تنفيذ الدالة وتعريفها.
لتعريفه ، سأقول فقط مربع باطل.
نعلم أنه يأخذ مؤشرًا صحيحًا ، لذلك سأقول int star x.
والآن نريد أن نضربها في نفسها.
لكننا نريد التأكد من عدم تغيير العنوان.
إذن ما يمكننا فعله هنا هو أنه يمكننا جعل هذا ثابتًا
، لكنك تريد وضع الثابت بعد نوع
البيانات لأننا لا نريد تغيير قيمة
x أو عنوان ما يشير إليه يمكننا أن نقول ثابت int.
إذا لم نرغب في تغيير قيمة
x ، فسنقول ثابتًا. لكننا نريد تغيير قيمة x ، سنقوم بتربيعها بنفسها.
إذن لتربيعها بمفردها ، أولًا ، ما نريد تغييره
هو القيمة النهائية لـ x. لذلك علينا استخدام
عامل المراوغة. يتعين علينا إزالة الإشارة إليه بعلامة النجمة.
ثم نقول فقط يساوي ، لا نريد أن نضرب
س في س لأن هذا سيضرب العناوين فقط. X عبارة عن مؤشر ، لا نريد الحصول على قيمة
x فقط ، بل نريد الحصول على قيمة ما يشير x إليه.
لذا ، مرة أخرى ، علينا إزالة مرجعها
ثم نضربها في نفسها. سنقوم بإزالتها مرتين.
قد يكون من الجيد وضع هذا
بين قوسين فقط بحيث يسهل فهم ما يحدث هنا.
أنت تلغي الإشارة إلى المؤشر ، وتحصل على قيمته
ثم تضرب في قيمته ثم تضيف فقط الفاصلة المنقوطة
، وهذا كل ما عليك فعله. لذلك عندما نقوم بتشغيل هذا البرنامج
، سوف يطبع 81.
ستقوم بطباعة قيمة الأسطوانات. سوف يتغير Num داخل المربع لأننا
نمرر العنوان هناك.
لا يمكننا تغيير قيمة المؤشر فعليًا ، لذلك
لدينا الثابت بعد الكتابة.
لذلك نقول هنا بناء ويبدو أننا
لم نغير الإعلان.
والآن نريد فقط التأكد من
صحة كل شيء آخر.
إذا كنت تريد أن يكون المؤشر ثابتًا ، فيجب
عليك وضعه بعد علامة النجمة.
لذا يعني ثابت البدء
int أنه لا يمكنك تغيير قيمة
x ، وهو عنوان num.
إذا وضعنا const قبل int أو بعد
الإدخال قبل علامة النجمة ، فهذا يعني
أنه لا يمكنك تغيير قيمة ما يشير إليه المؤشر.
الآن عند تشغيل هذا ، يجب أن نرى الناتج 81.
مرة أخرى ، ما يخبرنا به هذا
هو أننا قمنا بتعديل البيانات.
تم
تعديل هذا المتغير المحلي num داخل الدالة وتغيرت قيمتها.
هذا ليس طبيعيا. لم نتعلم هذا المفهوم حتى الآن. تم تمرير هذا بالإشارة.
ولكن في ج ما يحدث هو أنك تقوم بتمرير نسخة من العنوان.
هذا هو السبب في أنها زائدة عن الحاجة حقًا ، ولا نحتاج حتى إلى الثابت
لأنه حتى لو قمنا بتغيير قيمة المؤشر ، فهي نسخة من
قيمة المؤشر ، لذلك لا تحتاج حقًا إلى القيام بذلك.
الآن إذا لم نرغب في استخدام رقم موجود ، فيمكننا إنشاء
مؤشر علينا فقط تخصيص ذاكرة له.
إذن ما علينا فعله هنا هو إنشاء عدد النجوم int.
ولكن ما يتعين علينا القيام به هو أولًا أن نلقي بالمولوك
لأن malloc يعود بمؤشر الفراغ ولكن يمكننا
تخصيص الذاكرة ديناميكيًا.
وهنا ، علينا أن نقول حقًا فقط لأننا
ننشئ عددًا صحيحًا واحدًا ، يمكننا فقط تحديد حجم
int وهذا سيخصص لنا ذاكرة.
وبعد ذلك ، كل ما علينا فعله هو تمرير العدد التربيعي.
وبعد ذلك عندما نبني
هذا ، فإنه سيفعل الشيء نفسه ولكن ليس
لديه الآن قيمة لـ num أيضًا ، لذلك
لن يعرف في الواقع ما الذي
يجب حسابه ، لذلك يتعين عليك بالفعل تعيين
قيمة الأس سنقول هنا أربعة ، قم بإزالة
الإشارة إليها. وبعد ذلك الآن عند إنشائه وتشغيله
، يجب أن تحصل على 16.
الآن الشيء الوحيد هنا هو أننا نريد طباعة القيمة ، لذلك نريد أن نقول num.
وبعد ذلك عند تشغيله ، يجب أن نرى 16.
وهو في الحقيقة نفس نوع السلوك
، ونرى 16.
كان الاختلاف الوحيد هنا هو أننا كنا نخصص
ذاكرة لما تشير إليه النقطة بدلاً من مجرد الإشارة إلى موقع ذاكرة
موجود بعلامة العطف.
مرة أخرى ، من الأشياء المهمة التي يجب ملاحظتها هنا ، هذا الرقم يتغير
خارج الوظيفة. يتم تمرير هذا
من خلال فهم المرجع. عندما نستخدم عامل de-reference ،
عامل المراوغة للحصول على قيمة ما تشير إليه النقطة.
افهم أنه إذا كانت الوظيفة تأخذ مؤشرًا وكان لدينا
مؤشر ، فيمكننا فقط إرسال الاسم.
إذا لم يكن يأخذ مؤشرًا وكان
في الواقع قيمة ، فعلينا إلغاء
الإشارة إليه. وهذا يشبه جهاز المسح.
لذا هنا علينا أن نقول علامة العطف.
وبعد ذلك أيضًا عندما نطبعه ، لن نضطر
إلى إزالة مرجع أي شيء لأنه ليس مؤشرًا ، ومن ثم سيكون
هذا هو الشيء نفسه هنا.
ثم فهم الثابت الثاني. تشير كلمة Const قبل النجم int إلى أن
القيمة التي تشير إليها النقطة لا يمكن تغييرها.
تشير القيمة الثابتة بعد البداية إلى أن عنوان المؤشر لا يمكنه تغيير قيمة المؤشر.
اتمنى ان يكون ذلك مفيدا.
مرة أخرى ، العب مع هذا ، قم بتغيير بعض بناء الجملة ، العبث كما فعلت.
سوف يساعدك على تعلم الكثير. شكرًا لك.