عند استخدام الكود الذي وضعته في محرك البحث لغة البرمجة C++، والذي يتضمن استخدام دالة std::cin
في دالة الإخراج std::cout
، فإن النتيجة التي تحصل عليها هي عنوان الذاكرة الخاص بالمتغير std::cin
.
لفهم هذا السلوك، دعنا نقوم بتفسير كيفية عمل هذه الدوال. دالة std::cin
هي دالة تقوم بقراءة الإدخال من المستخدم، وفي هذه الحالة، عند تجاهل تحديد متغير لتخزين القيمة التي يقوم المستخدم بإدخالها، فإنها تقوم بقراءة القيمة وتخزينها في الذاكرة. أما دالة std::cout
فهي تستخدم لإخراج البيانات إلى الإخراج القياسي (مثل وحدة التحكم في النظام). وعند استخدامها مع std::cin
، فإنها ستحاول إخراج قيمة المتغير std::cin
.
ولكن، عندما تقوم بتوجيه std::cin
إلى std::cout
مباشرة كما في الكود الذي قمت بتجربته، فإنه يتم نقل عنوان المتغير std::cin
بدلاً من قيمته. هذا يفسر لماذا تحصل على عنوان الذاكرة بدلاً من القيمة التي تم إدخالها.
وبالنظر إلى أن متغير std::cin
هو متغير عالمي يستخدم للقراءة من وحدة التحكم القياسية (مثل لوحة المفاتيح)، فإنه سيبقى يشير إلى نفس العنوان في كل مرة تقوم فيها بتشغيل البرنامج. هذا هو السبب في أنك ترى نفس العنوان في كل مرة تقوم فيها بتشغيل البرنامج، حتى بعد إعادة تشغيل الوحدة الطرفية (cmd) أو إعادة تشغيل النظام.
باختصار، ما تحصل عليه هو عنوان الذاكرة الخاص بالمتغير std::cin
، وهو يعكس طبيعة كيفية عمل البرنامج وكيفية التفاعل مع وحدة التحكم القياسية في C++.
المزيد من المعلومات
بالطبع، دعني أوضح المزيد من المعلومات لفهم أعمق حول ما يحدث في الكود الذي قمت بتجربته.
عندما تقوم بتوجيه std::cin
إلى std::cout
، فإنك في الواقع تقوم بتمرير عنوان المتغير std::cin
بدلاً من قيمته نفسها. وبما أن std::cin
هو كائن من النوع std::istream
، فإن std::cout
يحاول عرض قيمة هذا الكائن على الإخراج القياسي، والتي هي ببساطة عنوان الذاكرة.
الآن، ماذا يعني هذا العنوان الذي تراه؟
في الواقع، هذا العنوان هو عنوان في الذاكرة العشوائية (RAM) التي يستخدمها الكمبيوتر لتخزين البيانات أثناء تشغيل البرنامج. يتم تخصيص قطعة من الذاكرة لمتغير std::cin
، ويتم تعيين عنوان لهذه القطعة.
ولكن، يُفضل عدم الاعتماد على العناوين الفعلية في الذاكرة، لأنها قد تتغير في كل مرة تشغل فيها البرنامج أو حتى خلال تنفيذه بسبب عوامل مثل إعادة ترتيب المتغيرات في الذاكرة أو تخصيص ذاكرة جديدة. بدلاً من ذلك، يجب عليك الاعتماد على قيم المتغيرات وتنظيم البرنامج بشكل يسمح بتداول البيانات بين المتغيرات بطريقة موثوقة ومنظمة.
بالإضافة إلى ذلك، يُعد استخدام std::cin
و std::cout
بهذه الطريقة غير فعال من الناحية العملية، لأنهما يقومان بوظائف مختلفة تمامًا. std::cin
مخصصة للقراءة من مصادر الإدخال مثل لوحة المفاتيح، بينما std::cout
مخصصة لإخراج البيانات إلى الوحدة الطرفية، لذا استخدامهما معًا بدون تخزين القيمة المقروءة من std::cin
في متغير مناسب ليس مناسبًا.
باختصار، العنوان الذي تراه هو مكان في الذاكرة حيث يتم تخزين قيمة std::cin
، وهذا يوضح لماذا ترى نفس العنوان في كل مرة تشغل فيها البرنامج، وهو يعكس أيضًا طريقة عمل البرنامج وكيفية التفاعل مع وحدة التحكم القياسية في C++.