المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيفية عمل ال Pointers في ++C | وطريقة عملية لتقليل استعمال الذاكره ^_* مما تعلمته...



AZPC
08-01-2009, 05:59 PM
السلام عليكم ورحمة الله وبركاته :)

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

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

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

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

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

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


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

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


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

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

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


مثال:


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

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

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

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

مع تحيات اخوكمـــــــــــــــــــــــــــ
لمزيد من الدروس والبرامج زوروا موقعي الشخصي (http://addaxsoft.com) ;)

AZPC
08-01-2009, 06:28 PM
الحلقة الثانيه:

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

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


#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;

}


استخدام الذاكره:
http://i378.photobucket.com/albums/oo226/ZIDANI/no-del.png

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


#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;

}


استخدام الذاكره:
http://i378.photobucket.com/albums/oo226/ZIDANI/yes-del.png

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



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

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

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

AZPC
08-01-2009, 06:30 PM
ألان أترك المجال للأعضاء ... :)

اي اضافة .. سؤال .. اتفضلووو ،،، ^__^

لا تنسونا بدعواتكم الصالحه