سلسلة مجموعة إنيتياليساتيون
سؤال
هذا هو استمرار لآخر السؤال لدي.
النظر في التعليمات البرمجية التالية:
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";
) أنت تحدد صفيف على وجه التحديد ، وليس مؤشر ، وبالتالي فإن العنوان الذي يشير إليه غير قابل للتعديل.لاحظ أنه يمكن اعتبار المصفوفة كمؤشر غير قابل للتعديل لكتلة معينة من الذاكرة.
المثال الأول الخاص بك يجمع في الواقع دون قضية في ج ((مترجم بلدي ، على الأقل).
لا تنتمي إلى StackOverflow