الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أسئلة في المؤشرات

بدأه khaled_prg في 9 أبريل 2010 · 10 رد · 1,138 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أجمل تحية مني إلى أروع منتدى عربي يجمع بين عمالقة البرمجة في شتى المجالات ...

اليوم جئتكم بأسئلة تتعلق بالمؤشرات .. و أرجوا من الإخوة الأفاضل أن يشرحوا لي ما استشكل علي بالتفصيـــل .. و باللغة العربية أيضا , لأنني مبتدأ في السي++ و لا أعرف الإنجليزية !

1-مالفرق بين المرجع و المؤشر؟

2-نعلم أن عناوين الذاكرة تُكتب في النظام الست عشري ,مثل :0x11FF30

و لكن كيف يكون العنوان مكتوب بالنظام الست عشري و مع ذلك يحتوي على الحرف x ؟هل يوجد الحرف x في النظام الست عشري ؟ألا ينتهي هذا النظام عند الحرف F ؟

3-قمت بكتابة الكود الآتي في الفيجوال و الديف و البورلاند:

#include<iostream>
using namespace std;
int main()
{
int n=3;
cout<<&n<<endl;
system("pause");
return 0;
}

بالنسبة لعنوان المتغير فقد اختلف في المترجمات الثلاثة !! بل و حتى أن شكل العنوان يختلف من مترجم لآخر ! فمثلا يكون العنوان في البورلاند أطول !! بينما يتساوى طوله في كل من الديف و الفيجوال مع اختلاف في الأرقام !!!

إليكم مخرجات الكود في المترجمات الثلاثة:

a-البورلاند: 0x24ef23e8

b-الديف: 0x24ff74

c-الفيجوال : 0022ff7c

بمَ نُفسر اختلاف شكل العنوان بين المترجمات الثلاثة ؟؟؟

ولي طلب آخر :

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

في أمان الله.

#2
اقتباس
1-مالفرق بين المرجع و المؤشر؟

هل راجعت الفهرس ، توجد مجموعه كبيرة من المواضيع حول المؤشرات والrefrences :

/index.php?showtopic=204712

اقتباس

2-نعلم أن عناوين الذاكرة تُكتب في النظام الست عشري ,مثل :0x11FF30

و لكن كيف يكون العنوان مكتوب بالنظام الست عشري و مع ذلك يحتوي على الحرف x ؟هل يوجد الحرف x في النظام الست عشري ؟ألا ينتهي هذا النظام عند الحرف F ؟

ox هي وسيلة لتحديد التمثيل المستخدم ، مثلا لو افترضنا أنها لا توجد فما هو الرقم 11 ؟

هل هو 11 بالنظام السادس عشر أم بالثنائي أو بالعشري ؟

لذلك يتم كتابة :

11b لتحديد أنه ثنائي

0x11 لتحديد أنه سداسي عشر

11 لتحديد أنه عشري

اقتباس
بمَ نُفسر اختلاف شكل العنوان بين المترجمات الثلاثة ؟؟؟

سي++ لم تحدد طول معين لحجم المؤشر ولكن من خلال التجربة يكون حجم المؤشر في معالجات 8 بت هو 1 بايت ، أما معالجات 16 يكون 2 بايت ، أما في معالجات أنتل يكون الحجم باختلاف المترجم (هل هو 16 بت أم 32 بت) ..

أضف السطر:

cout << sizeof(&n) << endl;

لتعرف حجم المؤشر هو 4 بايت في الديف (وهو ليس مترجم!) ..

بالتوفيق،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

عافاك المولى و زادك علما و فضلا و إيمانا.

اقتباس
هل راجعت الفهرس ، توجد مجموعه كبيرة من المواضيع حول المؤشرات والrefrences :

نعم أخي الفاضل.. راجعت الفهرس جيدا .. ووجدت بعض المواضيع التي تتحدث عن المرجعيات و المؤشرات و لكن لم أجد جواب سؤالي :blush:

يعني أنا أريد الفرق بين المرجع و المؤشر, فقط .. هذا ما أريده :)

اقتباس
ox هي وسيلة لتحديد التمثيل المستخدم ، مثلا لو افترضنا أنها لا توجد فما هو الرقم 11 ؟

هل هو 11 بالنظام السادس عشر أم بالثنائي أو بالعشري ؟

لذلك يتم كتابة :

11b لتحديد أنه ثنائي

0x11 لتحديد أنه سداسي عشر

11 لتحديد أنه عشري

اتضحت الفكرة.. لن أنساك بالدعاء بظهر الغيب.

اقتباس
سي++ لم تحدد طول معين لحجم المؤشر ولكن من خلال التجربة يكون حجم المؤشر في معالجات 8 بت هو 1 بايت ، أما معالجات 16 يكون 2 بايت ، أما في معالجات أنتل يكون الحجم باختلاف المترجم (هل هو 16 بت أم 32 بت) ..

طيب .. ماشي الحال.. ولكن كيف يختلف طول حجم المؤشر في نفس الجهاز (نفس المعالج)

هناك نقطة أخرى:

نعلم جميعا أنه يتم الوصول إلى المتغير عن طريق عنوانه في الذاكرة .. ولكن كيف نجد أكثر من عنوان لمتغير واحد وفي نفس الجهاز أيضا !؟

يعني البورلاند يعطي عنوان للمتغير ثم يأتي الديف ليُعطي عنونا مخالفا لما أعطاه البورلاند ! و يأتي الفيجوال بعنوان مخالف للعنوانين السابقين !!!

أليس هذا تناقضا في حد ذاته ؟

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

إذا كان هناك بعض الإخوة يعرفون هذا الموضوع فأرجوا منهم أن يدلوني عليه

في أمان الله

تم تعديل هذه المشاركة بواسطة khaled_prg في 10 أبريل 2010 في 01:14

#4
اقتباس
يعني أنا أريد الفرق بين المرجع و المؤشر, فقط .. هذا ما أريده :)

المؤشر هو متغير قيمته عباره عن مكان اخر فى الذاكره

المرجع هو ليس متغير و انما اسم بديل لمنطقة معينه من الذاكره.

اقتباس
طيب .. ماشي الحال.. ولكن كيف يختلف طول حجم المؤشر في نفس الجهاز (نفس المعالج)

ليكون الكلام محدد اكثر سيكون سؤالك كالتالى:

اقتباس
طيب .. ماشي الحال.. ولكن كيف يختلف طول حجم المؤشر اثناء طباعته على الشاشه في نفس الجهاز (نفس المعالج)

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

اقتباس
نعلم جميعا أنه يتم الوصول إلى المتغير عن طريق عنوانه في الذاكرة .. ولكن كيف نجد أكثر من عنوان لمتغير واحد وفي نفس الجهاز أيضا !؟

يعني البورلاند يعطي عنوان للمتغير ثم يأتي الديف ليُعطي عنونا مخالفا لما أعطاه البورلاند ! و يأتي الفيجوال بعنوان مخالف للعنوانين السابقين !!!

أليس هذا تناقضا في حد ذاته ؟

للمتغير عنوان واحد فى الذاكره و لا يوجد غيره و لكن عند اغلاقك للبرنامج و تشغيله مره اخرى فإن موقع الذاكره الذى كان يمثل المتغير قد يكون تم حجزه من برنامج اخر فأصبح الموقع داخل الذاكره غير متاح لهذا يتم حجز مكان اخر بعنوان اخر و هكذا.

و الله ولى التوفيق

1

مدونتي: C++ Tips and Tricks

#5
اقتباس
المؤشر هو متغير قيمته عباره عن مكان اخر فى الذاكره

المرجع هو ليس متغير و انما اسم بديل لمنطقة معينه من الذاكره.

اتضخت الفكرة .. لن أنساك بالدعاءبظهر الغيب.

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

إذا كان الأمر يتعلق بطباعة أو حذف 0x فسيكون كلامك واضح .. ولكن كتابة العنوان تختلف !

يعني البورلاند يعطي عنوان طويل بالمقارنة مع بقية المترجمات و الفيجوال يكتب 00 بدل 0x !

لم أفهم جيدا .. أرجوا التوضيح.

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

اتضخت الفكرة .. لن أنساك بالدعاء بظهر الغيب.

#6
اقتباس
عني البورلاند يعطي عنوان طويل بالمقارنة مع بقية المترجمات و الفيجوال يكتب 00 بدل 0x !

هذا ترميز للأرقام، قم بمراجعة الوثائق الخاصه بالمترجم لهذه الداله لتعرف عنها اكثر.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#7

للتوضيح لدينا عنوان 0000F4AB

المترجم X يمكن صياغته بالطريقة 0x0000F4AB

المترجم Y يمكن صياغته بالطريقة 0xF4AB

المترجم Z يمكن صياغته بالطريقة 0000F4AB

وهكذا لكل مترجم implementer طريقته الخاصه .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#8
اقتباس
هذا ترميز للأرقام، قم بمراجعة الوثائق الخاصه بالمترجم لهذه الداله لتعرف عنها اكثر.

للأسف الشديد .. أنا لا أعرف الإنجليزية حتى أستفيد من الوثائق الخاصة بالمترجم :blush:

اقتباس
للتوضيح لدينا عنوان 0000F4AB

المترجم X يمكن صياغته بالطريقة 0x0000F4AB

المترجم Y يمكن صياغته بالطريقة 0xF4AB

المترجم Z يمكن صياغته بالطريقة 0000F4AB

وهكذا لكل مترجم implementer طريقته الخاصه .

لو كان الإختلاف الذي حصل بين المترجمات مثل الإختلاف الذي كتبته في المثال ..لكان الأمر واضحا :) يعني إضافة 0x أو حذفها أو عدم كتابة الأصفار التي تقع عن يسار العنوان (لا تؤثر).

ولكن الكتابة تختلف من حيث القيمة و الطول و الشكل !!!

أرجوا التوضيح و مشكورين مقدما :)

#9
اقتباس
ولكن الكتابة تختلف من حيث القيمة و الطول و الشكل !!!

لكن الكتابة تختلف من حيث القيمة

اقتباس

للمتغير عنوان واحد فى الذاكره و لا يوجد غيره و لكن عند اغلاقك للبرنامج و تشغيله مره اخرى فإن موقع الذاكره الذى كان يمثل المتغير قد يكون تم حجزه من برنامج اخر فأصبح الموقع داخل الذاكره غير متاح لهذا يتم حجز مكان اخر بعنوان اخر و هكذا.

لكن الكتابة تختلف من حيث الطول و الشكل

اقتباس

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

اقتباس
للأسف الشديد .. أنا لا أعرف الإنجليزية حتى أستفيد من الوثائق الخاصة بالمترجم :blush:

اخى لغة التكنولوجيا هى الإنجليزيه فلا تتوقع انك ستستطيع الإستمرار بدون تعلمها، استعن بالله و ابدء

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#10

0x mean is a flag to differr a number from integer to hexadecimal,...

the address when you output it is differnet from time to another,because only the operating system determine in which block of ram have the program occupy..

#11

السلام عليكم ورحمة الله...

تفضل هذا موضوعي الذي تسأل عنه (جزء من النص مفقود عن المؤشرات)...

موفق يارب

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

مواضيع مشابهة