سؤال

عندما ج تشغيل البرنامج و المتغيرات التي تم تعيينها إلى مواقع الذاكرة ، ج القياسية أقول إذا كانت هذه القيمة تهيئة?

// global variables
int a;
int b = 0;
static int c;

في التعليمات البرمجية أعلاه, 'b' سيتم تهيئة 0.ما هي القيمة الأولية من "أ" ؟ هو 'ج' أي مختلفة لأنه هو ثابت إلى هذه الوحدة ؟

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

المحلول

منذ أن نذكر على وجه التحديد العالمية المتغيرات:في حالة المتغيرات العالمية ، سواء كانت معلنة static أو لا يكون initialised إلى 0.

المحلية المتغيرات من ناحية أخرى سوف يكون غير معرف (ما لم يتم الإعلان عنها static, في هذه الحالة أيضا سوف يكون initialised 0-بفضل تايلر ماكهنري).ترجم هذا يعني أنه لا يمكنك الاعتماد عليها تحتوي على أي شيء معين-سوف تحتوي فقط مهما كانت عشوائية القمامة بالفعل في الذاكرة في هذا الموقع ، والتي يمكن أن تكون مختلفة من تشغيل.

نصائح أخرى

تحرير: التالية تنطبق فقط على المتغيرات المحلية - لا globals.

الأولي قيمة متغير غير معرف.في بعض اللغات متغير موقع في الذاكرة هو صفر سيكون على الإعلان لكن في ج (C++ وكذلك) متغير غير مهيأ سوف تحتوي على كل ما القمامة التي تعيش في ذلك المكان في ذلك الوقت.

لذا فإن أفضل طريقة للتفكير في الأمر هو أنه متغير غير مهيأ من المرجح أن تحتوي على القمامة و السلوك غير معرف.

وa سوف يكون صفرا، وc جدا، إذا كانت العالمي ولم يتم تهيئة صراحة. هذا ينطبق أيضا على متغيرات ثابتة المحلية.

لم يتم تهيئة

والمتغيرات المحلية فقط غير ثابت. كما لم يتم تهيئة الذاكرة المخصصة مع malloc.

here للحصول على قواعد التهيئة و تخصيص في C للكائنات مختلفة.

أنا كتابة طريقة ببطء شديد هذا الصباح.ثلاثة أشخاص برزت بسرعة كما كنت أجيب ، حتى لقد أزالت أكثر من منصبي.الرابط وجدت واضحة و مختصرة, حتى أنا نشر هذا على أية حال: ويكيبيديا "متغير غير مهيأ" من أجل مناقشة القضايا الأساسية.

اختبار سريع يبين وج أن تكون 0.

int a;
static int c;
int main() {
    printf("%d %d\n", a, c);
    return 0;
}

وموقع من (ج) يتم تحديد في الترجمة الوقت؛ وهذا هو، انهم لا توضع على كومة ولا في فترة زمنية الذاكرة التي تم إرجاعها بواسطة malloc. وأعتقد أن يقول معيار C انهم تهيئة إلى 0 في جميع الحالات، ثم.

وأنا واثق من 99.9٪ حول فيما يتعلق c، و 98٪ ثقة فيما يتعلق a. وstatic الكلمة، في سياق المتغيرات العالمية، هو في الحقيقة مشابهة لprivate في (ويقول) C ++ و Java: حان الرؤية، وليس موقع التخزين

وماذا يقول أندرو هير حول متغيرات غير مهيأ ينطبق على البيانات المخزنة على المكدس أو في الذاكرة malloc'd. وليس ذلك للمتغيرات المخزنة بشكل ثابت.

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