Sobes.tech
Junior

Երբ և որքան ժամանակ են գոյություն ունենում գլոբալ և տեղական փոփոխականները C++-ում?

sobes.tech AI

Պատասխան AI-ից

Գլոբալ փոփոխականներ

  • Տևողություն: Ծրագրի մեկնարկից մինչև ավարտը:
  • Պահեստավորման վայր: Սովորաբար՝ կայուն հիշողության տարածքում (.data կամ .bss հատվածներում):
  • Անվանում:
    • Անկայուն գլոբալ փոփոխականները, որոնք սահմանված են ֆայլի մակարդակում, բարդ կոնստրուկտորներով, նախապես ինիցիալիզացվում են main()-ի կանչից առաջ:
    • Նույնպես ինիցիալիզացվում են զրոյական արժեքով փոփոխականները (օր., int i = 0;):
    • const-ով կամ կայուն տևողությամբ փոփոխականները ծրագրի բեռնումից ժամանակ ինիցիալիզացվում են:
  • Հասանելիություն: Տեսանելի են բոլոր ֆունկցիաներում՝ տեսանելիության տարածքում:

Տեղական փոփոխականներ

  • Տևողություն: Փոփոխականի սահմանումից սկսած՝ մինչև այդ բլոկից դուրս գալը:
  • Պահեստավորման վայր: Սովորաբար՝ ստեկում (ավտոմատ փոփոխականների համար): Կայուն տեղական փոփոխականները պահվում են կայուն հիշողության տարածքում:
  • Անվանում:
    • Ավտոմատ տեղական փոփոխականները չեն ինիցիալիզացվում ըստ նախնական կարգի (պարունակում են "աղտոտված" արժեքներ): Պահանջվում է բացահայտ ինիցիալիզացում:
    • Կայուն տեղական փոփոխականները ինիցիալիզացվում են մեկ անգամ՝ առաջին անգամ հասնելու ժամանակ:
  • Հասանելիություն: Միայն բլոկի ներսում, որտեղ սահմանված են:

Օրինակներ

// Գլոբալ փոփոխական
int global_variable = 10;

void some_function() {
    // Տեղական փոփոխական (ավտոմատ)
    int local_variable_1; // Անհայտ ինիցիալիզացված

    // Տեղական փոփոխական (ավտոմատ) ինիցիալիզացված
    int local_variable_2 = 20;

    // Կայուն տեղական փոփոխական
    static int static_local_variable = 30; // Միայն մեկ անգամ ինիցիալիզացվում է

    // Գլոբալ փոփոխականի հասանելիություն
    global_variable++;

    // Տեղական փոփոխականների հասանելիություն
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable պահեց արժեքը
    // Գլոբալ փոփոխականը հասանելի է այստեղ
    // local_variable_1 և local_variable_2 հասանելի չեն

    return 0;
}

Համեմատական աղյուսակ

Գծագիր Գլոբալ փոփոխականներ Տեղական փոփոխականներ (ավտոմատ) Կայուն տեղական փոփոխականներ
Մնացական ժամանակը Ծրագրի մեկնարկից մինչև ավարտը Փոփոխականի սահմանումից մինչև այդ բլոկից դուրս գալը Առաջին հասնելուց մինչև ծրագրի ավարտը
Պահեստավորման վայր Ստատիկ հիշողության տարածք (.data, .bss) Ստեկ Ստատիկ հիշողության տարածք (.data, .bss)
Անվանում main()-ի կանչից առաջ կամ ծրագրի բեռնումից առաջ Անհրաժեշտ է բացահայտ ինիցիալիզացիա: Միայն առաջին հասնելու ժամանակ ինիցիալիզացվում է
Հասանելիություն Ամենուր ֆայլի տեսանելիության տարածքում Միայն բլոկի ներսում, որտեղ սահմանված է: