0965303260
TP. Hồ Chí Minh

[C]. Phạm Vi Của Biến

Trong chương trình C thì mỗi biến đều có phạm vi hoạt động nhất định, bài viết này mình sẽ giới thiệu cho các bạn các phạm vi chính trong C và cách sử dụng chúng

NỘI DUNG : 

  • Phạm Vi Global Và Local
  • Phạm Vi Đóng Mở Ngoặc Nhọn

main

1.Phạm Vi Global và Local

Phạm vi toàn cục - Global : Biến được khai báo bên ngoài hàm main và có thể được truy cập tại bất cứ đâu trong chương trình C

Phạm vi địa phương - Local : Biến được khai báo trong main hoặc trong các hàm con, biến này chỉ có thể truy cập bên trong hàm mà nó được khai báo

Ví dụ 1 : Biến toàn cục

#include "stdio.h"

int n = 28; // global

void printNumber(){
    printf("Gia tri cua n : %d\n", n);
}

int main(){
    printf("Gia tri cua n : %d\n", n);
    printNumber();
    return 0;
}

Output : 

Gia tri cua n : 28
Gia tri cua n : 28


Ví dụ 2 : Biến địa phương

#include "stdio.h"

void printNumber(){
    int n = 1000;
    printf("%d\n", n);
}

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

Output : 

error: 'n' was not declared in this scope

Giải thích : Biến n được khai báo bên trong hàm printNumber() nên nó chỉ có thể sử dụng bên trong hàm này.

Ví dụ 3 : Biến toàn cục và biến địa phương cùng tên

Nếu trong hàm của bạn có biến cùng tên với biến toàn cục thì khi bạn sử dụng biến cùng tên này chương trình sẽ ưu tiên sử dụng biến cục bộ.

#include "stdio.h"

int n = 28; //global

void printNumber(){
    int n = 1000; // local
    printf("Gia tri cua n trong ham : %d\n", n);
}

int main(){
    printNumber();
    int n = 2000; // local
    printf("Gia tri cua n trong ham main : %d\n", n);
    return 0;
}

Output : 

Gia tri cua n trong ham : 1000
Gia tri cua n trong ham main : 2000


2.Phạm Vi Đóng Mở Ngoặc Nhọn

Khi bạn khai báo biến bên trong đóng mở ngoặc nhọn (enclosing scope) của for, if, else, while... thì chương trình sẽ tạo ra 1 biến mới và biến này chỉ có thể sử dụng trong phạm vi mà nó được khai báo.

Khi phạm vi kết thúc thì biến sẽ bị hủy và không thể sử dụng được nữa.

Khi bạn có 3 biến cùng tên trong 3 phạm vi : Toàn cục, địa phương và mở ngoặc nhọn thì khi truy cập biến trong phạm vị đóng mở ngoặc nhọn thì thứ tự sẽ là mở ngoặc nhọn rồi tới địa phương và cuối cùng là phạm vi toàn cục. Mặc dù 3 biến này cùng tên nhưng do phạm vi khai báo khác nhau nên đây là 3 biến khác nhau.

Ví dụ 1 : 

#include "stdio.h"

int main(){
    {
        int n = 28;
        printf("%d\n", n); // 28 
    }
    printf("%d\n", n); // error
    return 0;
}

Output : 

error: 'n' was not declared in this scope

Giải thích : Biến n được khai báo trong 1 đóng mở ngoặc nhọn nên khi phạm vi đóng mở ngoặc nhọn này kết thúc thì bạn không thể truy cập vào n được nữa.

Ví dụ 2 : 

#include "stdio.h"

int main(){
    int n = 100;
    printf("%d\n", n); // 100
    {
        int n = 28;
        printf("%d\n", n); // 28 
    }
    return 0;
}

Output : 

100
28

Ví dụ 3 : 

#include "stdio.h"

int n = 100;

void printNum(){
    printf("%d\n", n); // global
}

int main(){
    printNum();
    int n = 200;
    printf("%d\n", n); // local
    {
        int n = 300; 
        printf("%d\n", n); // enclosing scope 
    }
    return 0;
}

Output : 

100
200
300