السلام عليكم في موضوعين مهمات مش فاهمهن الي هنه الاري والبوينتر ساعدوني في فهمهن والله يجزاكوا الخير.... (h)
ARRAy & Pointer
تخيل، قاعة بها مجموعة من الأشخاص
-
في حالة Array يكون الاشخاص منظمين في صف واحد، ما يطلق عليه اسم طابور
في حالة Pointers يكون الأشخاص متفرقين او مبعثرين في اماكن مختلفة في القاعة
والسلام عليكم ورحمة الله وبركاته
همممممممممممم .. اخوي ايمن , تعرف كتاب الأكسير !!!
اذا ما تعرفه ... ادعوك لقراءة هذا الكتاب الرائع والمميز في شرح لغة السي ++ ..
لذلك ادعوك لقراءة القسم الخاص بالأشياء اللي مو فاهمها سواء كنت تدرس السي او السي ++ ...
من خلال هذا الرابط تستطيع تحميل الكتاب ..
http://www.cb4a.com/books/open.php?cat=1&book=218
اما ان لم تفهم من خلال الكتاب فـ ان شاء الله .. سوف اعمل لك شرح بسيط عن المصفوفات لاني الى الآن ما درست المؤشرات !!؟؟
واسأل الله التيسير لي ولك ولجميع الأخوة ...
لا إله إلا الله محمد رسول الله عليه الصلاة والسلام
سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك
سأتقن الـ ++C و PHP إن شاء الله تعالى ...
جاري العمل على Microsoft Sql Server و MySQL ...
ال Pointer هو عباره عن مؤشر يأخذ عنوان متغير بحيث لو غيرت على قيمه المؤشر راح تتغير قيمه المتغير
int *ptri
int y = 5
ptr = &y
بكذا اعطيت عنوان ال Y للمؤشر ptr
ميزه المؤشرات ( سميت مؤشرات او Dynamic Variables)
لا يمكنك حذف اي متغير اثناء تنفيذ البرنامج اقصد مساحة المتغير وليسة قيمتة
المؤشرات تحل المشكله بامكانك إنشاء متغير يعتمد على مؤشر اثناء حذف المؤشر سوف تحذف القيمه ومساحته من الذاكره
int *ptr = new int
ptr= 10
(المؤشر)delete
او بامكانك انشاء Array ك مؤشرات
int *ptr = new int[10
دائما او قيمه يؤشر عليها الوؤشر هي الاولى داخل ال Array
تستطيع الوصول للقيمة عن طريق ptr[الاندكس]
او بامكانك زياده قيمه المؤشر
ptr = ptr +1
ويعطيكم العافيه
وهذا مثال قمت بعمله مخصوص بسيط و واضح وقمت بشرحه وتم استخدام ال Pointers
ويعطيكم العافيه
Developer ue self befor developing any thing else
يعطيكم العافية يا شباب أحب أن أضيف نقطة أن ما تؤشر عليه المؤشرات أو القيم تخزن في الـ Heap أما المتغيرات العادية يتم تخزينها في Stack البرنامج نفسه.
Khaled.Alshaya
مو شرط ان البوينترات ما تأشر الا على الهيب لكن ممكن تأشر على الستاك او حتى تأشر على الأنفايرومنت فاريبل او حتى ان شاء الله الارقيمنت فاريبل
والبوينتر ممكن يأشر على فنكشن والفنكشن زي ما هو معروف مكانه في الستاك
مرحبا أخ NullFlag مشكور لتوضيح المشاركة و لكن أنا كنت أقصد أن المؤشرات كبداية تخزن في الـ Heap لأوضح المصفوفات الديناميكية ..
كما ذكر الأخ NullFlag فالمؤشرات تعتبر من أكثر مواضيع البرمجة تعقيداً لأنها عبارة عن هندسة لبنى البيانات في البرنامج و يا عيني على مهندسين المؤشرات :D
ما في مهندسين في الحقيقة للمؤشرات, مزح, و لكن في الحقيقة المؤشرات لها تفاصيل كثيرة و لو حابين نحاول فتح المواضيع للفائدة فما في مشاكل ..
لو حابين نحاول فتح المواضيع للفائدة فما في مشاكل ..
ياليت والله .. حتى تسهلون علينا عملية الرجوع لمثل هذه المواضيع ....
وان شاء الله راح تفيد الكثير من المبتدئين امثالي ... وجزاكم الله خير يا شباب ...
لا إله إلا الله محمد رسول الله عليه الصلاة والسلام
سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك
سأتقن الـ ++C و PHP إن شاء الله تعالى ...
جاري العمل على Microsoft Sql Server و MySQL ...
البوينترات بأختصار :)
هي مؤشر لمنطقة في الميموري ويختلف حجمة بأختلاف الـ alignment للميموري ( 32 بت) يكون حجمه اربعه بايت لكن في الـ ( 64 بت) يكون 8 بايت حجم الميموري طبعا اقصد بالـ 64 بت هو address bus وليس الـ data bus وهذا خطأ شائع كثير يقول ان الفرق بين معالجات الـ 32 وال64 هو انك بال64 بت تقدر تزيد الميموري ولا يفرق السرعة لكن في الحقيقة لو قلنا بروسيسور 64 نقصد به الـ data bus هو 64 يعني لو كان الـ int في ال 32 هو 4 بايت اذا في الـ 64 راح يكون 8 وهو الضعف
وطبعا الدليل على كلامي نجد ان بروسيسورات الـ 16 اقصد Intel 8086 لديه الـ bus address هو 20 بت وليس 16 بت !!!
وعلى فكرة في اكثر من موضوع هنا لقيت الخطأ الشائع هذا
تشعبت جدا بالموضوع :)
الي ابي اوضحه ان البوينتر يحمل قيمة وهي ادرس وليس شرط ان تكون تأشر على سيقمنت معينه :)
اخوي Khaled.Alshaya والله ما فهمت وش تقصد هل تقصد ان البوينتر (وليس ما يؤشر عليه) يكون موجود بالـ Heap ؟؟ لا ما اظن
جرب المثال
int *a; int b=5; a=new int; cout<<&a<<endl<<&b<<endl<<a<<endl;
راح تلاحظ ان الفرق بين عنوان البوينتر والاتوماتيك فاريبل b هم متقاربين ويدل على انهم في نفس الـ segment لكن راح تلاحظ ان القيمة الي تأشر عليها a مكانها بعيد عن كل من نفس مكان a و b
0012FF7C 0012FF78 00401226
تم تعديل هذه المشاركة بواسطة NullFlag في 30 يناير 2007 في 20:38
Hi NullFlag
sorry for writing in english because I don't have Arabic keyboard now
I mean by that the Pointer is in the Heap that most books when they start teaching students they tell them that a pointer can reserve dynamic memory in the Heap.
Pointers can be in the Heap or the Stack or in the Glabal Memory.
most Students would not now about the real concept of Pointer.
you can have pointer to list of pointers or you can have constant pointers ....
in the respond you will get a chapter about pointers from my favourit book about ++C
Thanks
تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 30 يناير 2007 في 21:48
فهمت المقصد :)
حياك الله
هذا الموضوع مغلق.



