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()-ի կանչից առաջ կամ ծրագրի բեռնումից առաջ |
Անհրաժեշտ է բացահայտ ինիցիալիզացիա: | Միայն առաջին հասնելու ժամանակ ինիցիալիզացվում է |
| Հասանելիություն | Ամենուր ֆայլի տեսանելիության տարածքում | Միայն բլոկի ներսում, որտեղ սահմանված է: |