ما هو الفراغ * في C و C ++

Ma Hw Alfragh Fy C W C



C و C ++ هما لغتا برمجة تعتمدان بشكل كبير على المؤشرات لإدارة الذاكرة ومعالجة البيانات. المؤشرات هي متغيرات تخزن عناوين الذاكرة ، مما يسمح للبرامج بالوصول إلى البيانات المخزنة في الذاكرة ومعالجتها. نوع خاص من المؤشرات هو مؤشر باطل (باطل *) ، المعروف أيضًا باسم a مؤشر عام .

ما هو مؤشر الفراغ (باطل *)؟

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

إعلان مؤشر الفراغ في C و C ++

في C و C ++ ، فإن ملف مؤشر باطل تم التصريح عنه من خلال النحو التالي:







فارغ * ptr ؛

استخدام مؤشرات الفراغ في C و C ++

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



استخدام واحد شائع لـ مؤشرات باطلة في وظائف تخصيص الذاكرة مثل مالوك () الذي يقوم بإرجاع مؤشر فارغ إلى كتلة من الذاكرة يمكن استخدامها لتخزين أي نوع من البيانات. يمكن للمبرمج بعد ذلك توجيه مؤشر الفراغ إلى نوع البيانات المناسب للوصول إلى البيانات المخزنة في كتلة الذاكرة المخصصة ومعالجتها.



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





استخدام مؤشرات باطلة في C ++ متشابهة تقريبًا ، ومع ذلك ، يمكن أيضًا استخدامها لإنشاء واجهة عامة لكائنات من فئات مختلفة. يتم تحقيق ذلك غالبًا من خلال استخدام الوظائف الافتراضية ، والتي تسمح بمعالجة كائنات من فئات مختلفة بشكل موحد. علاوة على ذلك ، تقدم C ++ فحصًا أكثر صرامة للنوع من C ، مما يعني أن استخدام مؤشرات باطلة بشكل غير صحيح يمكن أن يؤدي إلى المزيد من الأخطاء والأخطاء.

نقاط يجب مراعاتها أثناء استخدام مؤشرات الفراغ في C و C ++

فيما يلي بعض النقاط التي يجب مراعاتها أثناء الاستخدام مؤشرات باطلة في C و C ++.



1: شركة، فارغ* يمكن استخدامها كقيمة إرجاع ومعلمة دالة ولكن في C ++ ، يجب أن يكون لديك نوع بيانات محدد من المؤشر.

على سبيل المثال:

في C ، يتم إعطاء الرمز أدناه:

# تضمين

# تضمين

فارغ * add_numbers ( int أ و int ب ) {

int * نتيجة = مالوك ( حجم ( int ) ) ؛

* نتيجة = أ + ب ؛

يعود ( فارغ * ) نتيجة ؛

}

فارغ print_result ( فارغ * نتيجة ) {

int * ptr = ( int * ) نتيجة ؛

printf ( 'النتيجة هي:٪ d ' و * ptr ) ؛

حر ( ptr ) ؛

}

int رئيسي ( ) {

int عدد 1 = 5 و عدد 2 = 7 ؛

فارغ * نتيجة = add_numbers ( عدد 1 و عدد 2 ) ؛

print_result ( نتيجة ) ؛

يعود 0 ؛

}

يحدد الكود أعلاه وظيفة add_numbers () الذي يعيد أ فارغ* تم تمرير المؤشر إلى نتيجة إضافة عددين صحيحين كوسيطات. الوظيفة print_result () يأخذ مؤشر * باطل ويطبع النتيجة. في الوظيفة () الرئيسية ، نسميها add_numbers () وتمرير الناتج مؤشر * باطل ل print_result () للطباعة.

في C ++ ، مطلوب نوع بيانات محدد.

# تضمين

استخدام اسم للمحطة ؛

فارغ طباعة ( int * على واحد ) {

كوت << 'العدد الصحيح هو:' << * على واحد << إندل ؛

}

int رئيسي ( ) {

int x = 10 ؛

int * ptr = & x ؛

طباعة ( ptr ) ؛

يعود 0 ؛

}

2: في C ، يمكنك تحويل مؤشر الفراغ إلى نوع مؤشر آخر من خلاله التحويل الضمني. ولكن في C ++ ، يجب عليك استخدام الامتداد تحويل صريح لتحويل مؤشر باطل إلى أي نوع مؤشر آخر.

في ما يلي مثال بسيط على رمز لكل من C و C ++ لتوضيح الفرق بين ضمني و تحويل صريح ل مؤشرات باطلة لأنواع المؤشرات الأخرى:

في C ، يتم استخدام الكود التالي:

# تضمين

فارغ printChar ( فارغ * الفصل ) {

شار ج = * ( شار * ) الفصل ؛

printf ( '٪ c ' و ج ) ؛

}

int رئيسي ( ) {

شار ج = 'أ' ؛

فارغ * ptr = & ج ؛

printChar ( ptr ) ؛

يعود 0 ؛

}

يحدد الكود أعلاه وظيفة printChar يأخذ مؤشر الفراغ كمعامل ويطبع الحرف المخزن في موقع الذاكرة هذا. في الوظيفة الرئيسية ، متغير char ج يتم تعريفه ويتم تخزين عنوانه في مؤشر فارغ ptr. ال printChar ثم يتم استدعاء الوظيفة مع مؤشر باطل 'ptr' كحجة. يتم تحويل مؤشر الفراغ بشكل صريح إلى مؤشر حرف في تنسيق 'printChar' وظيفة للوصول إلى القيمة المخزنة في ملفات 'ج' .

في C ++ ، يتم تقديم الكود أدناه:

# تضمين

فارغ طباعة ( فارغ * على واحد ) {

int * ptr = static_cast < int *> ( على واحد ) ؛

الأمراض المنقولة جنسيا :: كوت << * ptr << الأمراض المنقولة جنسيا :: إندل ؛

}

int رئيسي ( ) {

int x = 10 ؛

فارغ * ptr = & x ؛

طباعة ( ptr ) ؛

يعود 0 ؛

}

يحدد الكود أعلاه وظيفة طباعة يأخذ مؤشر الفراغ num كمعامل ويحوله إلى مؤشر عدد صحيح باستخدام عامل البث الثابت . تقوم الوظيفة بعد ذلك بطباعة قيمة العدد الصحيح الذي يشير إليه المؤشر المصبوب. في الوظيفة الرئيسية ، يتم تعريف متغير عدد صحيح x ويتم تخزين عنوانه في ملف مؤشر باطل ptr ، والذي يتم تمريره بعد ذلك إلى طباعة وظيفة. ناتج البرنامج هو قيمة x ، وهي 10.

افكار اخيرة

ال فارغ توفر المؤشرات في C و C ++ طريقة فعالة لمعالجة البيانات دون الحاجة إلى معرفة نوع البيانات المحدد. إنها مفيدة لتخصيص الذاكرة ومؤشرات الوظائف ، وكذلك لإنشاء واجهة عامة للكائنات من فئات مختلفة في C ++. ومع ذلك ، من المهم مراعاة الاختلافات بين C و C ++ في استخدامهما لـ مؤشرات باطلة ، مثل الحاجة إلى أنواع بيانات محددة في C ++ والحاجة إلى تحويل صريح عند إرسال مؤشرات باطلة لأنواع مؤشرات أخرى. يمكن أن يؤدي النظر بعناية في هذه النقاط إلى استخدام أكثر كفاءة وفعالية مؤشرات باطلة في البرمجة.