دليل مواقع عربيه دليل صدى الخليج


 
 

العودة   منتديات صدى الخليج > ~¤©§][الـمـنـتـديـــات الـتـقـنـيـة][§©¤~ > الكمبيوتر والبرامج
التسجيل التعليمـــات قائمة الأعضاء التقويم البحث مشاركات اليوم اجعل كافة المشاركات مقروءة
 
 

الكمبيوتر والبرامج برامج ،حلول ، مشاكل

الإهداءات
من اصبر على المقسوم لو كان فيه حرمان .. يمكن يصير بتالي الوقت خيره : اهـداء .. ..لكل انسان انحرم من شي حتى لو كان أغلى ماعنده من Taif : يللا اللي عنو مدرسه بكره يرووح ينام مافي سهر ع النت زي في الصيف <<اللي يقرا كلامها يقول ذي ماوراها مدرسه وإلا أقول تحدى تنامون قبل الساعه ثلاثه عادت الطلاب هههههههههه من من مكتبي خخ : يلا روووحوا ناموا وراكم مدرسه بكره يلا <<<لا ياشيخه وانتي بعد من أخبار مختصرة : انطلاق القمر الجديد W2M d’Eutelsat في اخر اسبوع من شهر نوفمبر القادم و سيكون في على إتجاه 16 درجة شرقا و سهل الاستقبال من جداويهــ والعز ليا : اهلن اش اخباركم واش مسوين يهوووووووووووووو اشبكم نايمين قربت المدارس نامو بدري من من مكتبي خخ : السلام عليكم كيفكم؟ وكيف احوالكم ؟احب اصبح عليكم وذكركم بانه ااااااااااخر خميس من الاجاااازه<<<<تحب تخرب الجوووو من من المقهى خخخ : مبروووووووووووك السنه الجديده والله يعين على المدرسه

رد
 
LinkBack أدوات الموضوع طرق مشاهدة الموضوع
قديم 05-14-06, 03:16 PM   رقم المشاركة : 1
.,.عضو شرف.,.
 
الصورة الرمزية شاكال شيمازاكي







شاكال شيمازاكي غير متواجد حالياً

شاكال شيمازاكي is on a distinguished road

افتراضي المؤشرات في لغة Pointers) C++/C)

المؤشرات في لغة Pointers) C++/C)

المؤشرات في لغة السي هي من أقوى ما يميز لغة السي, و لكن في نفس الوقت فهي تعتبر من أخطر الخصائص التي توفرها لغة السي و سنعرف لماذا بعد قليل.

أولاً: ماذا هو المؤشر ؟

المؤشر هو متغير يحتوي على عنوان متغير آخر.

و لكن ماذا يعني هذا الكلام ؟

عندما نعرف متغير من نوع int هكذا:

كود:
int a;

إذاً عند تنفيذ البرنامج سوف يحجز نظام التشغيل مقدار 2 أو 4 بايت لهذا المتغير في الذاكرة الرئيسية Main Memory يضع فيها المتغير معلوماته من قيمت المتغير و ما إلى ذلك و لكن كيف سيصل لها البرنامج عندما يحتاج أن يعرف قيمة هذا المتغير ؟

إذاً لا بد أن يكون لهذا المكان عنوان لا سيما إذا عرفنا ان الذاكرة الرئيسية مقسمة إلى عناوين.


ففي الأنترنت مثلاً لا تستطيع أن ترسل لي شيئاً إلا إذا كنت تعرف بريدي الإلكتروني (عنواني) و لكن لماذا ؟

لأنه يوجد في الانترنت آلاف الأشخاص فكيف تفرق بيني و بينهم ؟ بالعنوان طبعاً, و هذا الشيئ ينطبق على أجزاء الذاكرة الرئيسية.


إذاً المؤشر هم متغير يوجد بداخلة العنوان الذي يؤشر عليه.


ثانياً: كيف نعرف مؤشر ؟


ببساطة نستطيع تعريف المؤشر بإضافة العلامة * قبل إسم المتغير.

بالشكل التالي:
كود:
type *variable;

حيث أن type من الممكن أن يكون أي نوع نت أنواع البينات مثل:
كود:
int, char, float, double, ...

أو من الممكن حتى أن يكون Structure أو Class .

فمثلاً عندما نريد تعريف مؤشر من نوع int يكون كالتالي:

كود:
int *p;

و يفضل أن يكون إسم المؤشر محتوي على الحرف p أو ptr بحيث يدل على أنه مؤشر.


ثالثاً: العاملان * و & :


لقد بينا عمل العامل * و لكننا لم نتطرق إلى العامل &, العامل & يفيد إيجاد عنوان متغير, فلو كان عندنا متغير من نوع int مثلاً هكذا:

كود:
int a;

و أسندنا له القيمة 10 مثلاً:
كود:
a = 10;

و أردنا أن نعرف عنوان هذا المتغير و طبعاته سيكون الامر كالتالي:
كود:
printf("%d", &a);

كود:
cout<<&a;

في هذه الجملة سوف يطبع البرنامج عنوان المتغير a .

و لنتعرف على قاعدة مهمه جداً و هي أنه إذا عرفنا مؤشر px من نوع int هكذا:

كود:
int *px;

و اردنا أن نعرف عنوان المؤشر كيف ؟

نحن قلنا نعرف عنوان المتغير العادي بالعلامة & و بالتالي نفس الشيئ سيكون للمؤشرات و ستكتب هكذا:

كود:
&*px;

هذه الجملة تعطينا عنوان المؤشر px و لكن أليس هذا طويلاً ؟ و مقعد ؟

نعم هو كذلك و لغة السي وفرت علينا هذا الجهد بأن وضعت قاعدة تقول عنوان المؤشر سيعرف هكذا:

كود:
px;

أي أن علامة & تلغي علامة *.

رابعاً: إسناد المؤشرات:


في إسناد المؤشرات لن يخرج الإسناد عن حالتين ثنتين هما:

1.إسناد مؤشر لمتغير أو العكس.

2.إسناد مؤشر لمؤشر.


سنتعرف الآن على كيفية إسناد متغير لمؤشر:

لو كان لدينا التعريف التالي
كود:
int *px; int a = 3;

هنا عرفنا px من نوع مؤشر إلى int و عرفنا أيضاً a متغير من نوع int و أسندنا لـ a القيمة 3.

السؤال هنا: كيف سنجعل px يؤشر على a ?

الجواب بسيط جداً ولكن أكثرنا سيظن أن الجواب هو:
كود:
*px = a;

لكن لتجربو هذه الطريقة ستجون أنها خاطئة لماذا ؟!؟

نحن عرفنا المؤشر أنه مؤشر إلى عنوان في الذاكرة, إذا px لابد أن يحوي عنوان في الذاكرة الرئيسية وسوف نحجز لها هذا العنوان عن طريق الدالة :

malloc و بالنسبة لمستخدمي السي++ سوف يستخدمون المعامل new .

إذا سوف نضيف هذا السطر أولاً:
كود:
px = (int *)malloc(sizeof(int));

وهذه الدالة موجوده في المكتبة stdlib.h .

و بالنسبة لمستخدمي السي++:

كود:
px = new int;

و الان قد حجزنا للمتغير px مكان في الذاكرة مخصص لها و الان فقط نستطيع أن نقول:
كود:
*px = a;

أو:

كود:
*px = 10;

و من الممكن أن أجعل المؤشر px يؤشر على المتغير a كالتالي:

كود:
px = &a;

هنا لن نحتاج للدالة malloc أو المعامل new لماذا ؟

لأننا في الإسناد السابق قمنا بإسناد عنوان المتغير a إلى المؤشر px أي بعبارة أوضح:

" جعلنا px يؤشر على a ". و هنا عند أي تغيير يحدث في px سوف يحدث في عنوان px الذي هو عنوان a أي سيتغير a لنأخذ هذا البرنامج كدليل على هذا الكلام:

كود:
#include "stdio.h" int main () { int *px; int a; 01: px = &a; /* 'px' will point on 'a' */ 02: *px = 10; /* Changes on 'px' will effect on 'a' */ 03: printf("px = %d \n\n", *px); 04: printf("a = %d \n\n", a); /* 'a' and 'px' will have the same value that is 10 */ 05: a = 20; /* Changes on 'a' will effect on 'px' */ 06: printf("px = %d \n\n", *px); 07: printf("a = %d \n\n", a); /* 'a' and 'px' will have the same value that is 20 */ return 0; }

لاحظ عزيزي أنه في السطر 1 جعلنا px يؤشر على a أي أن px سيحتوي على عنوان a .

في السطر 2 جلعا غيرنا px و جعلناها تساوي 10 و لكن في الحقيقة نحن لم نغير px و لكننا قمنا بتغيير العنوان الذي يوجد بداخل px و المعنى الحرفي لهذا السطر هو:


" إذهب إلى العنوان الموجود داخل px و إجعل هذا العنوان يحتوي على القيمة 10 "
و نحن نعلم أن هذا العنوان هو عنوان a
( من السطر 1 ) إذا سوف يغيير هذا السطر المتغير a
و سنلاحظ هذا التغيير في السطرين 3 و 4 في السطر 3 قلنا للدالة printf إطبعي محتوى العنوان الموجود داخل px و في السطر 4 قلنا لها إطبعي قيمة المتغير a و سنلاحظ أن هذين القيمتين هما 10 إذاً سيطبع على الشاشة القيمة 10.

أما في السطر 5 أسندنا للمتغير a القيمة 20.

و في السطر 6 قلنا للدالة printf إطبعي القيمة الموجوده في العنوان الموجود داخل px و نحن نعرف أن العنوان الموجود داخل px هو عنوان a
( من السطر 1 ), ثم في السطر 7 طبعنا قيمة a و سيبطع على الشاشة القيمة 20 مرتين, مره من المؤشر px و مرة أخرى من المتغير a .

طبعاً هذا المثال سهل و لكن الذي يفهم هذا المثال سيفهم %90 من موضوع المؤشرات, و هذا الموضوع ليس صعب كما يعتقده الكثيرون.

الآن قد تعرفنا على كيفية جعل المؤشر يؤشر على متغير و على كيفية حجز عنوان في الذاكرة للمؤشر و كيفية إسناد القيم للمؤشر و لكن بقي علينا أن نتعرف على كيفية إسناد المؤشرات لبعضها البعض و على كيفية جعل المؤشر يؤشر على مؤشر آخر.

ففرضاً لو كان لدينا التعريق التالي:

كود:
int *p1, *p2; int a = 5;

و جعلنا p1 يؤشر على a بكتابة هذا السطر:
كود:
p1 = &a;

( أي جعلنا p1 يحوي عنوان a )

الآن نريد أن نجعل p2 يؤشر على p1 كيف سيكون ذلك ؟!؟

الحل ببساطة نجعل في p2 عنوان p1 الذي هو في الأصل عنوان a, إذاً يكون السطر الذي يجعل p2 يؤشر على P1 هو:

كود:
p2 = p1;

أي عنوان p2 يساوي عنوان p1 .

الآن لو طبعاً قيم:
كود:
*p1, *p2, a

ستحتوي جميع هذه القيم على القيمة 5 الموجوده في a.

و لو غيرنا قيمة واحده منها فقط سيتغير الكل تبعاً لذلك, لأن p1 يؤشر على a و p2 يؤشر على p1 و p1 يؤشر على a
إذاً منطقياً أن سؤشر p2 إلى a و الفي الحقيقة أي تغيير في p1, p2 سيكون التغيير في a لأنهما لا يحملان في الأصل إلى عنوان المنتغير a.

"يتبع الدرس القادم"
ان شاء الله اكون وفقت في الشرح يارب



من مشاركات في المنتدى

التوقيع :
 
رد مع اقتباس
قديم 05-14-06, 10:43 PM   رقم المشاركة : 4
بنت جدة
,, صمت الجراح ,,
 
الصورة الرمزية بنت جدة








بنت جدة غير متواجد حالياً

بنت جدة is on a distinguished road

افتراضي

((شاكال شيمازاكي))

يعطيك ألف عافية




من مشاركات بنت جدة في المنتدى
0 أيـــــــــن تذهب اذا بكيـــــــــــــت؟؟
0 my heart whispers..همـس قلبـي
0 قائمة الشيخ العصيمي بتاريخ29/4/1428
0 موضـوع مصيـري لبـنـــــت جـدة*/فقـط لمن ينتمـي لـ/*كنت احبـك*/
0 ماهو السـؤال الذي لا تحبــــــــــــــه
0 فيلــــــــــم أميركــــــــــــي عن السعوديـة/*المملكـة*/
0 مذيعة برامج اسلامية تخلع الحجاب لكي تظهر بال نيولوك الجديد
0 موقــــــــع لتصغير الصـور روعـة/*مجـرب*/
0 لا تنخـــــــدعوا بالمظـــــــــــاهر
0 سأغتـــــــالني..وسأترجى الحـزن

التوقيع :


[size=4]خــــــــــــــــــــــــــــــــــلاص
رحلــــــــــــــــــــــــــــــــتsize]
سأتـرك كل شيء أحبـه
ليس منتـدى كنت احبـك
فحسـب
بل حتـى
أهلـي
أمي
ابـي
صديقـاتي
عالمـي
وحتــــــــــى
جـــــــــــــدة سأتركهـا
سأكن
بنـت جـدة دون ان اسكنهـا
ـــــــــــــــــــــــــــــــــــــ
أتفتقـدني؟؟
ادخل هنـا

عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]
 
رد مع اقتباس
رد


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
طرق مشاهدة الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة
الانتقال السريع إلى

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
المؤشرات في لغة Pointers) C++/C) شاكال شيمازاكي الكمبيوتر والبرامج 2 05-20-06 09:46 PM


الساعة الآن: 02:05 AM


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
تركيب وتطوير فريق منتديات صدى الخليج

Security byi.s.s.w

 

 
تصميم مجاني .. إهداء من شركة نظم المعلومات لخدمات التكنولوجيا
 

شنط جنز - ازياء2008 - مجوهرات هنديه - مكياج عيون - مكياج هندي - مكياج 2007-2008 - إكسسوارات - مكياج للسهرات - اسلاميات - توبيكات - من سيربح المليون - لعبه البلوت - وسائط - رسائل جوال - صور ياسر القحطاني للماسنجر - توبيكات+صور - توبيكات لقصائد حامد زيد - خلفيات جميلة - صور للتصاميم - فضائح التعليم العالي - ثيمات نوكيا - تعلم اللغه الانجليزيه - برامج ترجمة - حوادث وجرائم - هل تعلم - شاعر المليون - تعلم الفوتوشوب - تواقيع - صورانمي - العاب - ايقونات - برامج2007-2008 - تعليم قيادة السيارات - تعليم اطفال - تعليم الطبخ - فضيحه رئيس دوله عربيه - نكات

Search Engine Friendly URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116