0Pricing
Zig Academy · درس

المؤشرات الثابتة والمحاذاة

عبّروا عن الوصول للقراءة فقط وتخطيط الذاكرة

المؤشرات الثابتة والمحاذاة درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.

وصول للقراءة فقط

غالبًا ما تريد مشاركة قيمة مع التعهد بعدم تغييرها. يمنح المؤشر الثابت صلاحية القراءة مع منع الكتابة.

نوع ‎*const T‎

اكتب مؤشراً إلى بيانات غير قابلة للتغيير بالشكل *const T. يمكنك القراءة من خلاله، لكن إسناد قيمة إلى الهدف الذي يشير إليه يؤدي إلى خطأ في الترجمة.

const x: i32 = 5;
const p: *const i32 = &x;

الثبات ينتقل مع &

يؤدي أخذ عنوان قيمة ثابتة تلقائياً إلى الحصول على *const T، ولذلك يحافظ النوع على عدم قابلية التغيير.

const v: u8 = 9;
const p = &v; // *const u8

التحويل من قابل للتغيير إلى ثابت

يمكن تحويل *T إلى *const T بحرية، لأن إسقاط صلاحية الكتابة آمن دائماً. أما العكس فغير مسموح.

var n: i32 = 1;
const ro: *const i32 = &n;

لماذا نفضّل const

يشير قبول وسيط من النوع *const T إلى المستدعين بأنك ستقرأ فقط، مما يجعل الوثوق بالدوال أسهل.

fn show(p: *const i32) void {
    // read only
}

ماذا تعني المحاذاة

لكل نوع محاذاة: وهي حدّ العنوان الذي يجب أن يبدأ عنده. يحتاج u32 عادةً إلى عنوان يقبل القسمة على أربعة.

الاستعلام باستخدام @alignOf

تعيد الدالة المضمّنة @alignOf(T) المحاذاة المطلوبة لنوع ما بالبايت، تماماً كما تعيد @sizeOf حجمه.

const a = @alignOf(u32);

المحاذاة في النوع

يمكنك تحديد محاذاة المؤشر ضمن نوعه باستخدام align، كما في *align(4) u8، لفرض حدّ محاذاة معيّن.

var p: *align(4) u8 = undefined;

لماذا تهم المحاذاة

تقرأ الأجهزة البيانات المحاذاة بسرعة أكبر، وبعض وحدات المعالجة المركزية تُطلق خطأً عند الوصول غير المحاذي. يتتبّع Zig المحاذاة ضمن النوع لضمان صحة ذلك.

المحاذاة الزائدة والناقصة

يمكن للمؤشر أن يَعِد بمحاذاة أقوى من الافتراضية، لكن لا يمكنك إضعافها دون تحويل صريح مثل @alignCast.

الجمع بين const و align

يتكامل الاثنان بشكل طبيعي: ‏*const align(8) T‏ هو مؤشر للقراءة فقط، ويضمن أيضاً حداً يبدأ عنده العنوان بمحاذاة ثمانية بايتات.

تحقّق سريع

تكتب دالة لا تحتاج إلا إلى قراءة القيمة التي يشير إليها مؤشر. ما نوع الوسيط الذي يعبّر عن ذلك بأفضل شكل؟

مراجعة

يشارك مؤشر *const T البيانات للقراءة فقط، ويمكن تحويله من *T، بينما تحافظ المحاذاة، التي تظهر عبر @alignOf و align(n)، على صحة الوصول إلى الذاكرة وسرعته. 🎯

الأسئلة الشائعة

هل درس «المؤشرات الثابتة والمحاذاة» مجاني؟

نعم — نص درس «المؤشرات الثابتة والمحاذاة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.

ماذا ستتعلم في «المؤشرات الثابتة والمحاذاة»؟

عبّروا عن الوصول للقراءة فقط وتخطيط الذاكرة تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟

لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «المؤشرات الثابتة والمحاذاة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟

نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مؤشرات العنصر الواحد باستخدام *T
  2. إلغاء الإشارة باستخدام ptr.*
  3. مؤشرات العناصر المتعددة [*]T
  4. المؤشرات الثابتة والمحاذاة
← العودة إلى Zig Academy