Junior
როდის და რამდენ ხანს არსებობს გლობალური და ადგილობრივი ცვლადები C++-ში?
sobes.tech AI
პასუხი AI-სგან
გლობალური ცვლადები
- არსებობის დრო: პროგრამის დაწყებიდან დასრულებამდე.
- საწყობი ადგილი: ჩვეულებრივ სტატიკურ მეხსიერებაში (.data ან .bss სექციაში შესრულებადი ფაილის).
- ინიციალიზაცია:
- არასტატიკური გლობალური ცვლადები, რომლებიც განსაზღვრულია ფაილზე, და ტრივიული კონსტრუქტორებით, ინიცირებულია
main()-ის გამოძახებამდე. - ნულოვანი ინიციალიზაციის გლობალური ცვლადები (მაგალითად, int i = 0;) ასევე ინიცირებულია
main()-ის წინ. - ცვლადები, განსაზღვრული
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++;
// some_function()-დან გამოსვლის შემდეგ, local_variable_1 და local_variable_2 აღარ არსებობს
// 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()-ის გამოძახებამდე ან პროგრამის ჩატვირთვისას |
ავტომატურად არ ინიცირებულია. საჭიროებს გამოხატულ ინიციალიზაციას | ერთხელ, განსაზღვრის პირველ მიღწევაზე |
| ხელმისაწვდომობა | ყველგან სქოპის ფარგლებში | მხოლოდ ბლოკში, სადაც განსაზღვრულია | მხოლოდ ბლოკში, სადაც განსაზღვრულია |