سؤال

أعلم أن المؤشرات تخزن عنوان القيمة التي تشير إليها، ولكن إذا قمت بعرض قيمة المؤشر مباشرة على الشاشة، فستحصل على رقم سداسي عشري. إذا كان الرقم هو بالضبط ما يخزن المؤشر، ثم عندما يقول

pA = pB; //both are pointers

أنت نسخ العنوان. ثم لن يكون هناك نفقات أكبر لاستخدام المؤشرات عند العمل مع عناصر صغيرة جدا مثل intرمل boolس؟

هل كانت مفيدة؟

المحلول

مؤشر هو أساسا فقط عدد. يخزن العنوان في ذاكرة الوصول العشوائي حيث تكون البيانات. المؤشر نفسه صغير جدا (ربما بنفس الحجم مثل int على مساحة 32 بت، long على 64 بت).

أنت صحيح رغم أن int * لن ينقذ أي مساحة عند العمل مع intس. ولكن هذه ليست النقطة (لا تهدف التورية). المؤشرات هناك حتى تتمكن من الحصول عليها المراجع للأشياء، لا تستخدم فقط أشياء أنفسهم.

نصائح أخرى

عناوين الذاكرة.

هذه هي المواقع في الذاكرة حيث الأشياء الأخرى هو.

تكون المؤشرات عموما حجم كلمة المعالج، حتى يتم نقلها بشكل عام في دورة تعليمية واحدة. باختصار، فهي سريعة.

كما قال آخرون، فإن المؤشر يخزن عنوان ذاكرة هو "مجرد رقم" ولكن هذا هو تجريد. اعتمادا على بنية المعالج قد يكون أكثر من رقم واحد، على سبيل المثال قاعدة وإزاحة يجب إضافتها إلى Dereference المؤشر . في هذه الحالة، يكون النفقات العامة أعلى قليلا مما لو كان العنوان رقم واحد.

نعم، هناك النفقات العامة في الوصول إلى INT أو BOOL عبر مؤشر مقابل مباشرة، حيث يمكن للمعالج وضع المتغير في سجل. عادة ما تستخدم المؤشرات حيث تفوق قيمة عدم التنقل أي نفقات النفقات العامة، أي اجتياز صفيف.

لقد كنت أشير إلى الوقت النفقات العامة. لست متأكدا إذا كان المرجع أكثر مهتما الفضاء أو الوقت النفقات العامة.

يشير الرقم إلى عنوانه في الذاكرة. عادة ما يكون حجم المؤشر الحجم الأصلي في بنية الكمبيوتر، لذلك لا يوجد أي نظام إضافي مقارنة بأي نوع بدائي آخر.

في بعض البنيات، يوجد مرفقات إضافية من المؤشرات إلى الشخصيات لأن الهندسة المعمارية تدعم فقط معالجة الكلمات (قيم 32 أو 64 بت). لذلك يتم تخزين المؤشر إلى حرف كعنوان كلمة وإزاحة الحرف داخل هذه الكلمة. يؤدي إلغاء الإشارة إلى المؤشر إحضار الكلمة ثم يتم تحويلها وإخفاءها قيمة لاستخراج الحرف.

عنوان في الذاكرة. يشير إلى مكان ما! :-)

اسمحوا لي أن أبدأ من الأساسيات. بادئ ذي بدء، سيتعين عليك معرفة المتغير وكيف يتم استخدامها.

المتغيرات هي في الأساس مواقع الذاكرة (عادة ما تحتوي على بعض القيم) وسنستخدم بعض المعرف (أي أسماء متغيرة) للإشارة إلى موقع الذاكرة واستخدم القيمة الموجودة في هذا الموقع.

لفهم ذلك بشكل أفضل، افترض أننا نريد أن نريد المعلومات من خلايا الذاكرة الموجودة في موقعها إلى المتغير الحالي. هل يمكننا استخدام المعرف لاستخراج المعلومات من الخلايا القريبة؟ لا. نظرا لأن المعرف (اسم المتغير) سيعطي فقط القيمة الواردة في هذه الخلية المعينة.

ولكن، إذا استطعنا بطريقة ما أن نحصل على عنوان الذاكرة التي يوجد بها هذا المتغير، فيمكننا الوصول إليها بسهولة إلى مواقع قريبة واستخدام معلوماتها أيضا (في وقت التشغيل).

هذا هو المكان الذي تأتي فيه المؤشرات في اللعب. يتم استخدامها لتخزين موقع هذا المتغير حتى نتمكن من استخدام معلومات العنوان الإضافية كلما كان ذلك مطلوبا.

بناء الجملة: لتخزين عنوان المتغير، يمكننا ببساطة استخدام & (عنوان) المشغل.

foo = &bar 

هنا foo يخزن عنوان شريط المتغير.

الآن، ماذا لو أرغبنا في معرفة القيمة الحالية في هذا العنوان؟

لذلك، يمكننا ببساطة استخدام * (dereference) المشغل.

value = *foo

الآن بعد أن علينا تخزين عنوان المتغير، سنحتاج إلى الذاكرة بنفس الطريقة التي نحتاجها في حالة وجود متغير. هذا يعني أن المؤشرات يتم تخزينها أيضا في الذاكرة بنفس الطريقة مثل المتغيرات الأخرى، لذلك تماما مثل في حالة المتغيرات، يمكننا أيضا تخزين عنوان المؤشر في مؤشر آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top