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

كيفية عمل ال Pointers في ++c | وطريقة عملية لتقليل استعمال الذاكره ^_* مما تعلمته...

بدأه azpc في 9 يناير 2009 · 3 رد · 2,929 مشاهدة · في C++.Net
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أما بعد: عن أبي هريرة قال قال : رسول الله صلى الله عليه وسلم { أفضل الصدقة أن يتعلم المسلم علما ثم يعلمه أخاه المسلم }

فاللهم انفعنا بما علمتنا.

كيف حال الشباب ؟ :wink2:

اليوم درسنا دسم شوي :P وهو عن ال Pointers !

وقت كنت اتعلم ال ++C من مواقع النت .. دايما كان يخيفني هذا الموضوع ,, ولكم طلع بسيـــط ومفيد جدا جدا جدا :wink2:

قولو بسم الله .. !

ال Pointer هو عبارة عن مساحة في الذاكره ..

المساحات في الذاكره يكون عندها عناوين:

أمثله عن العناوين:

كـود PHP

0x22ff74
^

^

هل شاهدت هذا من قبل؟ :wink2: تلميح: Hex Editors ! ;)

عشان نوضح اكثر...

كل متغير Variable عنده مساحة -عنوان- في الذاكره على هذا الشكل 0x22ff74 ..

وعن طريق العنوان نستطيع ان نتحكم في المتغير كيف نشاء .. والي نستفيد منه اكثر شي انه نقدر نحذف هذا المتغير بعد ان نستخدمه !!! اي اننا نحرر الذاكره من هذا المتغير الذي لم نعد نحتاجه :wow:

مثال:

كـود PHP
int *p = new int;

*p = 5;

cout<<"- Address of myVariable is: "<<&p<<endl;

cout<<"- Value of myVariable is: "<<*p<<endl;

cout<<"- I am going to add +1 to myVariable now..."<<endl;

cout<<"- MyVariable is now: "<<*p+1<<endl;

cout<<"- I am going to free the momery from myVariable!!!"<<endl;

delete p;

اول شي قلنا للكومبايلر ان Pointer --> int

يعني سياخذ عنوان متغير int

ثم قمنا ببعض العمليات على المتغير ..

ثم حذفناه من الذاكره

بهذا الامر:

كـود PHP
delete p;
قد يكون الدرس صعب .. لكن بالتطبيث سيصبح سهلا باذن الله :)

مع تحيات اخوكمـــــــــــــــــــــــــــ

لمزيد من الدروس والبرامج زوروا موقعي الشخصي ;)

الحلقة الثانيه:

الان خلونا نشوف ايش يصير في الذاكره اذا استخدمنا Pointer فيه 100 عنوان !

مثال 1 -- بدون تحرير الذاكره من ال 100 متغير ..

كـود PHP

#include <iostream>

using namespace std;

void main()

{

int n = 100;

int *p = new int[n];

for(int i = 1 ; i<= n ; i++)

{

*p = i;

cout<<*p<<", ";

p++;

}

p -= n;

//delete []p;

cout<<"Value of our pointer: "<<*p<<endl;

}

استخدام الذاكره:

no-del.png

مثال 2 -- بمسح ال 100 متغير من الذاكره ... والدليل اخر متغير سيكون عشوائيا !!

كـود PHP
#include <iostream>

using namespace std;

void main()

{

int n = 100;

int *p = new int[n];

for(int i = 1 ; i<= n ; i++)

{

*p = i;

cout<<*p<<", ";

p++;

}

cout<<"Now we will delete the pointer"<<endl<<endl;

p -= n;

delete []p;

cout<<"Value of our pointer: "<<*p<<endl;

}

استخدام الذاكره:

yes-del.png

شفتو الفرق ؟! :wink2:

طبعا في هذا البرنامج الفرق غير كبير ... ولكن تتوقعو في برنامج مثل ال Office و Firefox .. الفرق بيكون صغير؟؟؟؟ :)

في المثال السابق استخدمنا Dynamic Arrays :) .. وهذا بروحه موضوع كبير .. ان شاء الله في المستقبل :D

كل الحقوق محفوظه .. عند النقل أرجو ذكر المصدر مثل ما هو .. مع رابط موضوع المنتدى + موقعي :)

Baneer.jpg
#2

شكراً لك اخي الكريم

اعجبني امر مسح المتغير من الداكرة

ولكن لم يعمل معي للاسف

قم بتطبيق مثالك وقمت باضافة كود للتحقق من مسحه

حيث قمت بالتغيير في المتغير بعد تنفيذ امر المسح ولكن لم ينجح الامر

وهذا ما قمت به بالضبط

int main()
{
int *p = new int;
*p = 5;
cout<<"- I am going to free the momery from myVariable!!!"<<endl; 
delete p; //مسح المتغير 
*p = 20; // اذا تم مسح المتغير بالفعل هنا سيحدث خطا وهو اننا نريد الكتابة في متغير غير موجود اصلا 
printf("%d\n",p); وهذا لم يحدث بل تم طباعة محتوى المتغير
	return 0;
}

والان سؤالي هل اخطات انا بشيء ام لم افهم شيء

بانتضارك

بالتوفيق

#3

p متغير يشير إلى قيمة، *p هو متغير يؤشر إلى ذاكرة، المتغيرات لا تحذف

راجع هذا الموضوع: /index.ph...=0&p=933674

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

انت أعدت تهيئة المتغير بالرقم 20

ومن ثم أعطيت امر لطباعة عنوان المتغير p الجديد

جرب هذا الكود ولاحظ

int main()
{
int *p = new int;
*p = 5;
cout<<"- I am going to free the momery from myVariable!!!"<<endl; 
delete p; //مسح المتغير 
printf("%d\n",p); 
	return 0;
}

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

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

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

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

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