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

سؤال صغنون في المؤشرات حليت بس ابي اتأكد من حلي

مغلق
بدأه عذوبة الصمت في 19 يناير 2008 · 6 رد · 978 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

عندي اختبار فاينل غدا في ++c ..

دعواتكم الله لا يهينكم .. ومعي هالبرنامج الصغير عندي سؤال بسيط فيه ..

اقتباس

#include<iostream.h>

int main()

{

int x=3;

int y=4;

int *p;

p=new int [2];

p[0]=x;

p[1]=y;

cout<<*++p;

cout<<p[0]+1;

return o;

}

انا طلعت اول شيء وبقولكم شلون فهمت واذا فهمي غلط ياليت تعدلووون لي وتفهمووني :)

cout<<*++p;

انه يأشر على قيمة ال p بعدين يزيد 1 ,,

يعني اذا كان :

الاندكس الاول [0] فيه قيمة ال3 ..

والاندكس الثاني[1]فيه قيمة ال 4 ..

راح يأشر على الثلاثه وازيد عليها واحد وتطلع لي 4 ..

يعني الاوت بت = 4 ..

^

هذا الاولى طيب الثانيه مافهمتها ..

cout<<p[0]+ 1;

شلون ؟ هل اني اقول اندكس الزيرو تحرك خانه وصار مكان الاندكس الاول اللي قيمته 4 ولما اضيف عليه واحد يطلع 5 ..

ويكون الاوت بت =5 ؟؟

ولو سمحتوا اذا ممكن تفهموني لو كان البرنامج السابق طالب الحالات التاليه :

اقتباس

cout<<*p++;

وبعد /

اقتباس

cout<<++ *p;

وشكررراااااا لكم ..

انتظررركم :)

#2

في السطر التالي :

cout << *++p;

يزيد المؤشر (وليس المؤشر عليه) واحد ( في الحقيقه هو يزيد أربعه بايت لان النوع int )

يعني اذا كان :

&(p[0]) = 0x644

و

&(p[1]) = 0x648

ومن المعلوم أن :

p = &(p[0])

فانه سيغير قيمة p إلى (0x648) وسيعرض قيمة y بدلا من x

لو افترضنا أن

x = 5;
y = 10;

فانه سيعرض 10 وليس 6 ...

أما في السطر :

cout<<p[0]+3;

(أنا استبدلت 1 بـ 3 ليسهل توضيح المسأله .. )

فسيعرض 13 لاننا أضفنا 3 إلى الـ y ..

+=+=+=+=+=+=+=+

cout << *p++;

سيعرض قيمة x ثم يزيد المؤشر واحد ويصبح يؤشر إلى y

cout<<++ *p;

سيزيد قيمة x واحد ثم يعرضها ..

+=+=+=+=+=+=+

هذا ما لدي اتمنى اني أكون افدتك .. واذا أخطأت ارجو التعديل ممن هم اعرف مني ..

تحياتي ..,

#3

عوافي الله يووفقك ..

الف شكر لك :)

#4

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

أخي:

المعذرة على التأخير ، لكن أهم شي نحصل المعلومة ....

بالنسبة للجملة:

cout<<*++p;

فهذه تطبع العنصر الثاني في المصفوفة (اللي هو قيمة y) طيب ليش؟!

بسبب الأولويات في لغة C++ فهي تعتبر أن المعامل ++ له الأولوية على معامل استخراج القيمة من العنوان *

------------------------------

أما الجملة:

cout<<p[0]+1;

فهي تطبع العنصر الأول مضافاً إليه واحد...!

لاحظ أنه لا يحتفظ بالقيمة الجديدة بعد الطباعة....!

------------------------------

cout<<*p++;

هنا يضيف واحد على العنصر الأول بعد طباعته....

------------------------------

cout<<++ *p;

هنا العكس الزيادة (للعنصر الأول) ثم الطباعة....

هذا يعتمد على ترتيب الأولويات في العمليات الحسابية....

دمتم في رعاية الله،،،

موقع كلية الحاسب الآلي ونظم المعلومات.

WWW.UQUCS.COM

#5

صح لسانك الاهم الاستفاده

اختبرت وخلصت وليقني بأن البرمجه لا تنتهي بالاختبار لازلت ابحث عن الاصح ..

شاكره لك :)

#6

أخي العواجي .. اسعد الله مساك

تقول :

اقتباس
أما الجملة:

cout<<p[0]+1;

فهي تطبع العنصر الأول مضافاً إليه واحد...!

لاحظ أنه لا يحتفظ بالقيمة الجديدة بعد الطباعة....!

وفي السؤال يقول أخوي عذوبة الصمت أن الاوت بت يساوي 5 .. وهو العنصر الثاني زايد واحد ..

يعني الزيادة تكون للعنصر الثاني ..

والله أعلم .. :)

تحياتي ..,

تم تعديل هذه المشاركة بواسطة وسع صدركـ في 21 يناير 2008 في 02:06

#7

السلام عليكم ,,

اقتباس
وفي السؤال يقول أخوي عذوبة الصمت أن الاوت بت يساوي 5 .. وهو العنصر الثاني زايد واحد ..

يعني الزيادة تكون للعنصر الثاني ..

كلامك صحيح أخي العزيز و كلام الأخ العواجي صحيح,

هنا تتم طباعة y + 1 و هو العنصر الثاني في المصفوفة أصلاً,

و لكن بعد انتقال المؤشر إلى y أصبحت y هي العنصر الأول :rolleyes:

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 21 يناير 2008 في 02:11

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…