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

ARRAy & Pointer

مغلق
بدأه ayman_ptr في 29 يناير 2007 · 13 رد · 1,746 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم في موضوعين مهمات مش فاهمهن الي هنه الاري والبوينتر ساعدوني في فهمهن والله يجزاكوا الخير.... (h)

hackers.jpg
#2

تخيل، قاعة بها مجموعة من الأشخاص

-

في حالة Array يكون الاشخاص منظمين في صف واحد، ما يطلق عليه اسم طابور

في حالة Pointers يكون الأشخاص متفرقين او مبعثرين في اماكن مختلفة في القاعة

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

d4baa0.gif
#3

همممممممممممم .. اخوي ايمن , تعرف كتاب الأكسير !!!

اذا ما تعرفه ... ادعوك لقراءة هذا الكتاب الرائع والمميز في شرح لغة السي ++ ..

لذلك ادعوك لقراءة القسم الخاص بالأشياء اللي مو فاهمها سواء كنت تدرس السي او السي ++ ...

من خلال هذا الرابط تستطيع تحميل الكتاب ..

http://www.cb4a.com/books/open.php?cat=1&book=218

اما ان لم تفهم من خلال الكتاب فـ ان شاء الله .. سوف اعمل لك شرح بسيط عن المصفوفات لاني الى الآن ما درست المؤشرات !!؟؟

واسأل الله التيسير لي ولك ولجميع الأخوة ...

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#4

مشكور اكيد ان شاء الله رح استفيد واذا ما افهمت رح اغلبكم وتشرحولي..............

hackers.jpg
#5

ال 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

ويعطيكم العافيه

#6

هذا مثال استخدمت ال Linked List DataStructure

والتي لا يمكن بنائها بغير استخدام المؤشرات

ارفقته واتمنى يكون فيه الفايده لك

pp.cpp

تم تعديل هذه المشاركة بواسطة _Developer_ في 29 يناير 2007 في 21:43

#7

وهذا مثال قمت بعمله مخصوص بسيط و واضح وقمت بشرحه وتم استخدام ال Pointers

ويعطيكم العافيه

Developer ue self befor developing any thing else

PointerString.cpp

#8

يعطيكم العافية يا شباب أحب أن أضيف نقطة أن ما تؤشر عليه المؤشرات أو القيم تخزن في الـ Heap أما المتغيرات العادية يتم تخزينها في Stack البرنامج نفسه.

#9

Khaled.Alshaya

مو شرط ان البوينترات ما تأشر الا على الهيب لكن ممكن تأشر على الستاك او حتى تأشر على الأنفايرومنت فاريبل او حتى ان شاء الله الارقيمنت فاريبل

والبوينتر ممكن يأشر على فنكشن والفنكشن زي ما هو معروف مكانه في الستاك

#10

مرحبا أخ NullFlag مشكور لتوضيح المشاركة و لكن أنا كنت أقصد أن المؤشرات كبداية تخزن في الـ Heap لأوضح المصفوفات الديناميكية ..

كما ذكر الأخ NullFlag فالمؤشرات تعتبر من أكثر مواضيع البرمجة تعقيداً لأنها عبارة عن هندسة لبنى البيانات في البرنامج و يا عيني على مهندسين المؤشرات :D

ما في مهندسين في الحقيقة للمؤشرات, مزح, و لكن في الحقيقة المؤشرات لها تفاصيل كثيرة و لو حابين نحاول فتح المواضيع للفائدة فما في مشاكل ..

#11
 لو حابين نحاول فتح المواضيع للفائدة فما في مشاكل ..

ياليت والله .. حتى تسهلون علينا عملية الرجوع لمثل هذه المواضيع ....

وان شاء الله راح تفيد الكثير من المبتدئين امثالي ... وجزاكم الله خير يا شباب ...

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#12

البوينترات بأختصار :)

هي مؤشر لمنطقة في الميموري ويختلف حجمة بأختلاف الـ 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

#13

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

Pointers & Dynamic Arrays

Thanks

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

#14

فهمت المقصد :)

حياك الله

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

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