أهلا ومرحبا بكم مرة أخرى.
في هذه المحاضرة ، أريد أن أتحدث عن الوصول إلى القيمة التي
يشير إليها المؤشر ، لذا
تذكر المؤشرات ، فهي تخزن عناوين الذاكرة.
يحتوي عنوان الذاكرة هذا في الواقع على قيمة في مكان ما.
وهكذا تشير المؤشرات إلى عنوان الذاكرة هذا. أريد أن أحصل على قيمة
ما تشير إليه.
لأنني سأطبع فقط قيمة المؤشر الذي سيكون عنوانًا ، لكنني أريد الحصول على العنوان ، أريد
الحصول على قيمة العنوان.
لذا يمكنك الوصول إلى قيمة العنوان الذي يشير إليه المؤشر
باستخدام عامل المراوغة. عامل المراوغة هو علامة النجمة.
لذلك تعلمنا كيفية استخدام علامة النجمة للإعلان عن مؤشر
، وسنستخدم أيضًا علامة النجمة لإيجاد القيمة التي يشير إليها المؤشر.
لذلك يشار إليه أيضًا باسم عامل dereference لأنك
تستخدمه لإلغاء إشارة مرجعية لمؤشر.
على سبيل المثال ، إذا كان لديك رقم يساوي 15 ، فإنك تعلن عن مؤشر
من النوع int ، مشيرًا إلى int وتخصيصه لعنوان الرقم باستخدام علامة العطف.
الآن كيف تحصل على قيمة المؤشر الذي يشير إليه.
يمكنك إزالة المرجع.
يمكنك أساسًا أن تكون القيمة التي يشير إليها
المؤشر هي القيمة 15 لأنها تشير إلى عنوان الرقم وهو 15.
لذا فإن متغير المؤشر يحتوي على عنوان الرقم المتغير.
يمكنك استخدام هذا في تعبير لحساب قيمة جديدة للنتيجة.
لنفترض أننا أردنا أن نحصل على نتيجة تساوي القيمة
التي يشير إليها المؤشر زائد خمسة. يمكنك استخدام علامة النجمة
لها قبل اسم المؤشر.
وبالتالي فإن ما سيفعله هذا هو أنه سيقول أساسًا ما يشير
إليه متغير المؤشر ، إنه يشير إلى 15 إضافة خمسة إليه.
إنه العنوان الذي
يشير إليه المؤشر إلى قيمة هذا العنوان.
لذا فإن علامة النجمة الخاصة بعامل
المراوغة التي يجب أن تلاحظها هي أيضًا الرمز المستخدم في الضرب ، كما يتم استخدامه
أيضًا عند تعريف أنواع المؤشرات. لذلك يمكن أن يصبح هذا مربكًا للغاية.
كيف تعرف بالضرورة ما يحدث أو كيف يعمل المترجم.
حسنًا ، الأمر كله يتعلق بالسياق. يعتمد ذلك على وقت استخدام هذه العلامة النجمية ومكان استخدامها.
إذا كنت تستخدم علامة النجمة عندما تعلن عن مؤشر بعد
نوع المؤشر مباشرة
، فمن الواضح أنه يستخدم تصريحًا.
إذا كنت تستخدم علامة النجمة بين رقمين
، فسيتم استخدامها في الضرب. وإذا تم استخدامه مباشرة
قبل اسم المؤشر على الجانب الأيمن ، على سبيل المثال ، أو الجانب الأيسر
، فسيتم تعيين قيمة أو الوصول إلى قيمة.
إذن فالأمر كله يتعلق بالسياق عندما تستخدم عامل المراوغة
هذا.
وهذه هي الطريقة التي يعمل بها.
هذه هي الطريقة التي سوف يفسرها المترجم.
عندما تراه في هذا المثال ، مؤشر النجمة ولم
يكن لديك نوع بيانات من قبل أو ليس لديك رقمان على كل
جانب ، فأنت تعلم أنه مؤشر غير مباشر ، إلغاء مرجعية.
لذلك دعونا نلقي نظرة على مثال. إليك مثال آخر
حيث سننشئ عددًا صحيحًا
يساوي 10. سنقوم أيضًا بإنشاء عدد صحيح من النوع المسمى x متغير آخر.
نبدأ العد حتى 10 ، x لا شيء.
ثم نقوم بإنشاء مؤشر int. نعلم أنه مؤشر int لأن لدينا
علامة النجمة بعد نوع البيانات ثم
أطلقنا عليها اسم مؤشر int.
سنقوم الآن بتعيين عنوان العد إلى مؤشر int هذا.
لأن تذكر أن المؤشرات تحتوي فقط على عناوين كقيم لها ، ولكنها
تشير أيضًا إلى شيء ما.
لذلك يمكننا بعد ذلك تعيين المتغير x أيا كان مؤشر int يشير إليه
، ما هي قيمة العنوان الموجود في المؤشر.
إذن ، سيعرض x فعليًا 10.
10. لذا ، إذا تقدمنا وعرضنا أن النسبة
المئوية d ird x بالمائة ird ، فإن العد يساوي 10 ، فإن x سيساوي 10.
هذه هي الطريقة التي يمكنك بها الرجوع إلى المؤشر والحصول على القيمة التي. إنه يشير إلى ما إذا كنت
تريد عرض قيم المؤشر لأن تذكر أن المؤشر
له قيمة في الذاكرة ، إنه
مجرد عنوان. فماذا إذا كنت تريد عرض
قيمة المؤشرات ، والتي يتم تمثيلها بواسطة
رقم سداسي عشري وعنوان؟
حسنًا ، يمكنك استخدام النسبة المئوية لمحدِّد التنسيق p. تحدثنا عن هذا من قبل.
سيؤدي هذا إلى إخراج قيمة مؤشر كعنوان ذاكرة في شكل سداسي عشري.
لذا ، إذا أردنا فعل شيء كهذا
حيث ، نعلن عن رقمنا ، نعلن
أن مؤشرنا نقوم بتهيئته ليصبح فارغًا لأن هذه ممارسة جيدة نريد أن نفعل ذلك دائمًا
عندما لا تقوم بتعيين شيء ما في إعلان للمؤشر ، قم بعمل تأكد من تهيئته إلى
لاغية.
ثم نسند إلى متغير العدد 10.
ثم نقوم بتعيين المؤشر الخاص بنا إلى عنوان الرقم.
لذا فإن قيمة p ستكون في الواقع عنوانًا.
عنوان. لذلك إذا حاولنا طباعته ، فسنستخدم النسبة المئوية p وستكون هذه هي قيمة العنوان.
إذا أردنا طباعة ما يشير إليه ، فسنضطر إلى إلغاء الإشارة
إليه باستخدام عامل المراوغة.
ولكن عند طباعة العنوان ، فإن ما يفعله هو طباعته بالنظام السداسي
العشري وتحتل المؤشرات 8 بايت في الذاكرة ، وتحتوي
العناوين على 16 رقمًا سداسيًا
عشريًا. فكيف يتم ذلك؟
حسنًا ، يعتمد ذلك على ما إذا كان جهازك يدعم عناوين 64 بت أو 32 بت أم لا.
إذا كان جهازك يحتوي على نظام تشغيل 64 بت
، فسترى 16 رقمًا سداسيًا عشريًا.
إذا كان جهازك أو نظام التشغيل الخاص بك يحتوي على عنونة
32 بت فقط ، فسترى السداسي العشري ممثلاً بـ 8 أرقام سداسية عشرية.
الآن ماذا لو كنت تريد عرض عنوان.
يمكنك أن تقول ما هو الفرق لأن المؤشر له قيمة.
ولكن يمكنك أيضًا عرض العنوان مع عنوان المشغل.
في هذا المثال ، نريد عرض عنوان الرقم.
الرقم ليس مؤشرا. الرقم هو مجرد عدد صحيح.
إذا أردنا الحصول على عنوان ذلك ، فإننا نستخدم علامة العطف.
إذا أردنا عرض عنوان ذلك ، فما عليك سوى استخدام النسبة المئوية p مرة أخرى.
أنت فقط تقوم بتطبيق علامة العطف.
لذلك إذا قمنا بتزويد علامة العطف بمتغير المؤشر
، فسنعرض بالفعل عنوان ذلك المؤشر
، وليس قيمة النقطة. تذكر أن عنوان المؤشر هو عنوان ما في الذاكرة.
قيمة المؤشر هي العنوان الذي يشير إليه.
والقيمة التي تشير إليها موجودة في مكان آخر في الذاكرة.
لذا تذكر هذا الرسم التوضيحي حيث
أظهرنا كيفية عمل المؤشرات.
المؤشر ، عندما تعلنه ، ينشئ ذاكرة لهذا المؤشر
، 8 بايت.
قيمة هذا المؤشر هي عنوان.
وبعد ذلك ، كل ما يشير إليه هذا المؤشر
هو قيمة ، عادة ما تكون من النوع الذي قدمته.
لكن تذكر أن هناك ثلاثة أجزاء منه حقًا.
إذا كنت تريد طباعة عنوان أرقام p ، فستستخدم علامة العطف مرة أخرى.
سيكون هذا هو عنوان المؤشر الفعلي.
وسيتعين عليك استخدام نجمة الفراغ للالتفاف حول تحذير.
لذلك تذكر أن المؤشر نفسه له عنوان ، تمامًا مثل أي متغير
آخر ، يتم تخصيصه عندما تعلنه.
يمكنك استخدام النسبة المئوية p كمحدد تحويل لعرض العناوين.
يمكنك استخدام علامة العطف وعنوان المشغل للإشارة إلى العنوان
الذي يشغله متغير الرقم p.
هذا هو عنوان المؤشر. ثم مرة أخرى ، المؤشر له
قيمة العنوان.
الهدف من إنشاء الفراغ هو منع التحذير من المترجم ، وبالتحديد
تتوقع مواصفات النسبة المئوية أن تكون القيمة نوعًا ما من نوع المؤشر.
لكن نوع رقم علامة العطف هو مؤشر إلى مؤشر له.
ولذا عليك أن تلقيها.
عرض عدد البايتات التي يستخدمها المؤشر.
طريقة أخرى للحصول على معلومات حول المؤشر.
هنا يمكنك استخدام sizeof عامل التشغيل. لقد تعلمنا عن حجم المشغل لعرض
أنواع مختلفة من البيانات بايت. يمكنك فعل الشيء نفسه باستخدام المؤشر.
على الجهاز الذي أقوم بتشغيله ، سيشغل هذا 8 بايت.
ويحتوي عنوان الجهاز على 64 بت
لأنه نظام تشغيل 64 بت.
وقد تحصل على تحذير مترجم عند استخدام sizeof بهذه الطريقة ، فإن
sizet هو نوع عدد صحيح محدد للتنفيذ.
لمنع التحذير ، يمكنك تحويل الوسيطة إلى نوع int مثل هذا.
إذاً ما ستفعله هو أن تقول حجم رقم p ، النسبة المئوية d بايت.
ويمكنك أن تقول int ، قم بإلقائها بحجم بوصة من رقم p.
سيعطيك هذا حجم المؤشر في الذاكرة ، وحجم المؤشر لهذا العنوان ، والذي
يبلغ ، مرة أخرى ، ثمانية بايت في معظم الأنظمة.
لأن هذا يحتوي فقط على عنوان.
مثال آخر هنا. سيعرض هذا عددًا من الأشياء.
وسنقوم بتشغيل هذا المثال لإظهار الناتج.
لكن قبل تشغيله ، أريد أن أصف قليلاً ما يحدث هنا. لدينا رقم تم الإعلان عنه.
لدينا مؤشر قام بتهيئة القيمة الصفرية.
قمنا بتعيين قيمة العدد على 10.
ثم ما نريد القيام به هو أننا نريد طباعة
عنوان العدد الصحيح ، ونريد طباعة قيمة الرقم ، بسيطة جدًا
، باستخدام عنوان المشغل ثم المتغير فقط.
عندما نفعل عنوان المشغل ، نقوم بعمل النسبة المئوية p.
سنقوم بعد ذلك بتعيين عنوان الرقم لمؤشرنا.
سنقوم بعد ذلك بطباعة بعض معلومات المؤشر.
نريد إخراج عنوان المؤشر نفسه.
يمكننا فقط استخدام النسبة المئوية p ، رقم علامة النجمة الفارغة.
نريد أن نرى عدد البايتات التي يحتويها هذا المؤشر في الذاكرة. يمكننا أن نقول sizeof.
نريد أن نرى القيمة الفعلية للمؤشر
، وهو عنوان. يمكننا فقط أن نقول رقم p بدون أي معلومات
إضافية ثم نستخدم النسبة المئوية p.
إذا أردنا أن نرى القيمة التي يشير إليها المؤشر
، القيمة الموجودة في العنوان ، فإننا نقوم بعمل
رقم p النجمي ، نستخدم عامل المراوغة.
ونعلم أن العدد p يشير إلى in لذا يمكننا القول نسبة d.
لذلك دعونا نلقي نظرة على هذا المثال في كتل التعليمات البرمجية لنرى كيف يتم عرضه بالفعل.
ما سنراه هو بعض الأرقام السداسية العشرية
للعناوين كلما عرضنا العناوين وسنرى القيم في حالات أخرى.
لذلك يجب أن يبدو هذا مألوفًا. هذا مجرد برنامج يوضح
لك كيفية الوصول إلى أجزاء مختلفة من المؤشر.
مرة أخرى ، لدينا نوع بيانات رقم منتظم int ، ولدينا
مؤشرنا. نقوم بتهيئته إلى لاغية.
سنقوم أولاً بعرض الرقم ، وهو 10. سيعرض هذا عنوان الرقم
، ثم سيعرض قيمة الرقم في السطر 10 و 11.
سنقوم بعد ذلك بتعيين المؤشر ، عنوان الرقم.
إذا أردنا رؤية العنوان الفعلي لمؤشرنا ، فإننا نستخدم فقط علامة العطف
، وعنوان المشغل ، ونضعه في نجمة باطلة.
نستخدم في المئة p.
إذا أردنا معرفة عدد البايتات الموجودة في المؤشر في الذاكرة ، فإننا نقوم بعمل النسبة المئوية للحجم d.
إذا أردنا أن نرى العنوان قيمة مؤشر الفول السوداني ، فإننا نفعل النسبة
المئوية p ونقول فقط رقم p ، لأن الرقم p هو عنوان.
إذا أردنا أن نرى ما يشير إليه المؤشر بقيمة العنوان الموجود
في قيمة المؤشر ، فإننا نقول فقط رقم النجمة p ، ونقوم
بإصدار إشارة إليه ، أي عامل المراوغة.
لذلك دعونا نجري هذا.
عندما أقوم بتشغيل هذا ، سترى أول شيئين تم طباعتهما
، عنوان الأرقام الموجود في السطر السادس
، وهذا رقم سداسي عشري ، 0060ff0c.
وهذا في الواقع يشغل برنامج 32 بت ، لذا ترون أنه 8 بتات
فقط.
متغير الرقم وهو 10.
ثم نقوم بطباعة عنوان المؤشر الفعلي للذاكرة المخصصة.
إنه عنوان مختلف عن الرقم.
لأن هذا هو العنوان المخصص للمؤشر.
حجم رقم المؤشر هو 4 بايت ، وهذا
يعني أنه عنوان 32 بت.
يجب أن تكون قيمة المؤشر ،
وهي عنوان الرقم ، هي نفسها ، وهي 0060ff0c.
وترى أنه يمكنك بالفعل الحصول على عنوان الرقم
بمجرد استخدام الاسم ، المؤشر مع النسبة المئوية ص.
رأينا حجم المشغل 4 بايت.
إذا كنت ترغب في الحصول على القيمة التي يشير إليها رقم p وهي
10 ، فعليك إلغاء الرجوع إليها باستخدام عامل المراوغة وستلاحظ أنه تمت طباعتها 10.
لكنك ترى أنك تستخدم النسبة المئوية p عندما تعرض
العناوين ، استخدم النسبة المئوية e عندما تعرض قيم مؤشر العدد الصحيح
أو عدد البايت.
إذن هذه هي الصيغة الأساسية للوصول إلى قيم المؤشر.
عنوان المؤشر ، علامة العطف ، القيمة
التي تشير إليها النقطة ، فقط اسم المتغير
وقيمة المؤشر نفسه هو اسم المتغير فقط ، ثم القيمة التي يشير
إليها المؤشر لاستخدام عامل المراوغة.
شكرًا لك. أتمنى أن يساعدك هذا. ادرس هذا ، قم بتشغيل هذا.