Phân biệt biến Local, Global, Extern, Static và Const

Biến local

– Biến local là xuất hiện trong phạm vi cụ thể.
– Biến local chỉ tồn tại trong hàm mà biến được khai báo
– Đôi khi, biến local được gọi là biến tự động (auto) bởi vì các biến được tự động sinh ra khi hàm được thực hiện và sẽ tự động biến mất khi kết thúc hàm.
– Từ khóa auto được sử dụng để ám chỉ biến cục bộ.

Ví dụ:

#include <conio.h>
#include <stdio.h>
void Display();
int main()
{
    Display();
    printf("\n i = %d", i); // error
    getch();
}

void Display()
{
    int i;
    for(i = 0; i < 10; i++)
        printf("\n %d", i);
}

Kết quả:

Biến local
Biến local

Chương trình này khi build sẽ bị lỗi do, biến i khai báo trong hàm Display(), nên phạm vị hoạt động của biến i chỉ trong hàm Display(). Hàm main() không sử dụng được biến i => gây ra lỗi.

 

Biến global và extern

– Biến global là biến được khai báo bên ngoài tất cả các hàm và có giá trị với tất cả các hàm trong chương trình. Tức là các hàm trong chương trình có thể sử dụng biến global để tính toán.
– Biến global tồn tại đến khi nào chương trình kết thúc.
– Có thể định nghĩa 1 biến global trong 1 file (.c/.cpp/.h) và truy cập biến này từ 1 file (.c/.cpp/.h) khác. Để làm điều này, biến phải được khai báo ở cả 2 file và từ khóa extern được thêm trong lần khai báo thứ 2.

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

#include <conio.h>
#include <stdio.h>

int i = 0; // Bien Global

void Display();

int main()
{
    Display();
    printf("\ni = %d", i);
    getch();
}
void Display()
{
    for(i = 0; i < 3; i++)
        printf("\ni = %d", i);
}

Kết quả:

Biến toàn cục global
Biến toàn cục global

 

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

File header1.h

#ifndef _HEADER_H_
#define _HEADER_H_

extern int X;
void display_x();

#endif

File file1.cpp

#include "header1.h"
#include "conio.h"

int X; // khai bao bien global

void main()
{
    X = 5;
    display_x();
    getch();
}

File file2.cpp

#include "stdio.h"
#include "header1.h"

void display_x()
{
    printf("X = %d", X);
}

Kết quả:

Biến Extern
Biến Extern

 

Biến static

– Biến static có thể là global hoặc local. Cả hai đều được khai báo với từ khóa static đi kèm.
– Biến local static là biến có thể duy trì giá trị từ lần gọi hàm thứ nhất đến các lần gọi hàm tiếp theo. Biến local static tồn tại đến khi chương trình kết thúc.
– Khi tạo 1 biến local static trong hàm, chúng ta nên khởi tạo giá trị cho chúng. Nếu không giá trị biến được gán mặc định bằng 0.
– Biến global static là biến global mà chỉ có thể truy cập từ file (.c/.cpp) mà biến đó được định nghĩa.

Biến const

– Trong ngôn ngữ C, tiền xử lý #define được sử dụng để tạo biến với giá trị là hằng số.
– Trong ngôn ngữ C++, xuất hiện một số vấn đề: khi sử dụng #define, tiền xử lí sẽ nhảy thẳng vào source code và thay thế biến bằng giá trị đã định nghĩa. Vì biến #define chỉ tồn tại bên trong file mà nó được định nghĩa, có thể xảy ra trường hợp định nghĩa tên biến giống nhưng khác về giá trị.
– Định nghĩa biến hằng trong C++, chủng ta nên sử dụng từ khóa const đi kèm.
– Khi sử dụng từ khóa const, phải khởi tạo giá trị ban đầu cho biến.

 

Be the first to comment

Leave a Reply