سؤال

هذا هو استمرار لآخر السؤال لدي.

النظر في التعليمات البرمجية التالية:

char *hi = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

فإنه لا تجميع لدهشتي (على ما يبدو أنا لا أعرف بناء الجملة ج وكذلك اعتقدت) ويولد الخطأ التالي:

  error: initializer element is not constant

إذا قمت بتغيير الحرف* إلى الحرف [] فإنه يجمع بشكل جيد:

char hi[] = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

يمكن للشخص أن يشرح لي لماذا?

هل كانت مفيدة؟

المحلول

في المثال الأول (char *hi = "hello";) ، تقوم بإنشاء مؤشر غير ثابت يتم تهيئته للإشارة إلى سلسلة ثابتة ثابتة "مرحبا".يمكن لهذا المؤشر ، من الناحية النظرية ، أن يشير إلى أي شيء تريده.

في المثال الثاني (char hi[] = "hello";) أنت تحدد صفيف على وجه التحديد ، وليس مؤشر ، وبالتالي فإن العنوان الذي يشير إليه غير قابل للتعديل.لاحظ أنه يمكن اعتبار المصفوفة كمؤشر غير قابل للتعديل لكتلة معينة من الذاكرة.

المثال الأول الخاص بك يجمع في الواقع دون قضية في ج ((مترجم بلدي ، على الأقل).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top