اذهب إلى المحتوى
  • 0

ما الفرق بين int  * const و * int const في لغة ++C؟

Mohssen A Mohssen

السؤال

ما الفرق بين النوع  int  * const و * int const ، حيث أجد صعوبة في فهم وظيفة كل نوع ومتى أسعمل كل نوع منها .. إلخ

أريد أن أعرف متى يجب أن أستعمل كل واحد منهما، ومتى لا أستعمل النوع الآخر، وما إلى ذلك.

وهل هناك طرق مختلفة لكتابة نفس النوع بأكثر من طريقة في لغة ++C؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

النوع * int يشير إلى مؤشر pointer إلى متغير من نوع int، ويكتب بصيغة واحدة فقط:

int x{ 1 };
int * y{ &x };
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

النوع الثاني هو * int const ، ويستخدم لعمل مؤشر pointer إلى ثابت من نوع int (أي أن المتغير هو الثابت وليس المؤشر)، ويكتب هذا النوع بطريقتين:

const int x{ 1 }; // لاحظ أن هذا ثابت constant
int const * y{ &x };
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

// نفس الكود السابق
const int x{ 1 };
const int * y{ &x };	// طريقة مختلفة لكتابة هذا النوع
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

النوع الثالث هو int * const وهو يعني عمل مؤشر ثابت لمتغير من نوع int (أي أن المؤشر pointer هو الثابت هنا):
 

int x{ 1 };
int * const y{ &x };
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

النوع الرابع وهو int const * const ويمكن أن يتم إستخدامه بطريقة أخرى وهي const int * const، تؤدي كلا الطريقتين نفس الغرض:

const int x{ 1 };
int const * const y{ &x };
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

// طريقة أخرى لإستعمال نفس النوع
const int x{ 1 };
const int * const y{ &x };
std::cout << x << ' ' << y << '\n'; // 1 004FFA3C

يمكنك ان تفهم ما يقوم به أي نوع من الأنواع السابقة من خلال قراءته من اليمين إلى اليسار، فعلى سبيل المثال النوع int * const يقرأ:

int * const
constant pointer to int

لاحظ كيف أن إتجاه القراءة بدأ بكلمة const إلى int

وبنفس الطريقة يمكن أن تقوم بقراءة باقي الأنواع:

int * - pointer to int
int const * - pointer to const int
int * const - const pointer to int
int const * const - const pointer to const int
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...