تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الرابع والأربعون - الـ Pointers
#1
كاتب الموضوع : أحمد جمال

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


إذا كنت مبرمج C++ ، فأنت بالتأكيد تدرك معنى pointer ، أما لو لم تكن كذلك ، أما لو لم تكن كذلك فعليك ان تعرف انه بالاضافة إلى ال value type وال refernce type ، هناك ايضاً ال pointer type والتي تختص بالاشارة إلى اماكن معينة في الذاكرة .

بداية أول ما ستعرفه انك لن تتعامل معها في الكود الطبيعي ، بل ستضطر لاستخدام unsafe code لعمل ذلك حيث أن السي شارب لن تسمح لك افتراضياً بالتعامل مع ال pointers ، لذا قم اولاً بالسماح لنفسك باستخدامها بالشكل التالي :



والآن من خلال الكود الخاص بك يمكنك كتابة كود يتعامل مع ال pointers بالشكل التالي مثلاً :

كود :
class Program
{
static void Main(string[] args)
{
unsafe
{
// Work with pointer types here!
}
// Can't work with pointers here!
}
}


الآن سنتعرف على الأدوات الأساسية التي ستعيننا على التعامل مع ال pointers قبل ان نغوص في الأمثلة :

* تستخدم لتعريف pointer .
& لمعرفة عنوان المتغير في الذاكرة .
-> تستخدم للوصول إلى حقل ما داخل الفئة التي يشير إليها ال pointer .
++ ، -- ، + ، - ، == ، != وغيره من المعاملات قابلة للعمل مع ال pointers .


مع استمرارنا في هذا الدرس سوف تكتشف ان التعامل مع ال unsafe code لن يكون بنفس سهولة العمل في safe code من خلال سي شارب العادية ، ولكن لماذا استخدم ال unsafe code ؟

- أغراض تعليمية .
- استخدامك لبعض ال dll's او ال COM Components التي تعمل اصلاً من خلال
pointers .
- محاولة تحسين اداء وسرعة مهمة معينة من خلال الوصول المباشر للذاكرة ، في مشروع التخرج الخاص بنا وأثناء قراءة pixels صورة ما لعمل بعض عمليات Image Processing كان بامكاننا استخدام دوال GetPixel و SetPixel الخاص بالصور للقراءة والكتابة ، ولكنها كانت لتكون عملية طويلة جداً للمرور على ال pixels بهذه الطريقة ، الحل البديل كان باستخدام unsafe code والتعامل مع ال pointers مباشرة للمرور على ال pixels الخاصة بالصورة ، جرب مثلاً كود لطرح صورتين بالطريقة Getpixel و setpixel ، وبعد هذه الدرس جربها مرة أخرى باستخدامpointers ، وأخبرني بالفارق ...


الآن سنعود مرة أخرى لنشرح من البداية ...
}}}}
تم الشكر بواسطة:
#2
يمكنك الآن تعريف pointer بالشكل التالي :

كود :
public Node* Left;
ليس هذا فقط ، بل بامكانك تعريف structure او class من النوع unsafe بالشكل التالي :

كود :
public unsafe struct Node
{
public int Value;
public Node* Left;
public Node* Right;
}
أو دالة ايضاً :

كود :
unsafe static void SquareIntPointer(int* myIntPointer)
{
// Square the value just for a test.
*myIntPointer *= *myIntPointer;
}
ولما كنا قد استخدمنا * لتعريف المتغير في البارميتر ، إذن سنرسل البارميتر باستخدام & بالشكل التالي :

كود :
SquareIntPointer(&myInt2);
ايضاً للوصول إلى المتغير Left في ال Node سنستخدم -> بالشكل التالي مثلاً :

كود :
n->Left=5;
والآن قبل النهاية سأحيلك للرابط التالي لمعالجة الصور مثلاً :
http://www.codeproject.com/KB/GDI-plus/ImageTraverser.aspx

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الأول : تحميل .net 2008 ومميزات استخدامه oneyemenweb2 1 669 07-03-13, 02:04 AM
آخر رد: abdoojh
  اعلان - انتهاء الدورة - الدرس التاسع والسبعون -) RaggiTech 0 598 14-10-12, 11:23 PM
آخر رد: RaggiTech
  الدرس الثامن والسبعون - Ajax RaggiTech 2 868 14-10-12, 11:22 PM
آخر رد: RaggiTech
  الدرس السابع والسبعون - ASP.net وقواعد البيانات RaggiTech 2 906 14-10-12, 11:19 PM
آخر رد: RaggiTech
  الدرس السادس والسبعون - ASP.net - الجزء الثالث RaggiTech 7 1,145 14-10-12, 11:14 PM
آخر رد: RaggiTech
  الدرس الخامس والسبعون - ASP.net - الجزء الثاني RaggiTech 5 1,310 14-10-12, 11:07 PM
آخر رد: RaggiTech
  الدرس الرابع والسبعون - ASP.net RaggiTech 6 1,085 14-10-12, 10:58 PM
آخر رد: RaggiTech
  الدرس الثالث والسبعون - مقدمة إلى تطوير المواقع RaggiTech 4 843 14-10-12, 10:44 PM
آخر رد: RaggiTech
  الدرس الثاني والسبعون - مقدمة إلى Mono RaggiTech 0 594 14-10-12, 10:37 PM
آخر رد: RaggiTech
  الدرس الواحد والسبعون - XML Commenting RaggiTech 2 793 14-10-12, 10:35 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم