Hướng dẫn lập trình C trên Linux Phần 17: Khởi tạo biến

theanh

Administrator
Nhân viên
Khởi tạo biến là một việc mà chúng ta đã làm trong suốt loạt bài hướng dẫn lập trình C đang diễn ra này cho đến nay, nhưng chúng ta chưa bao giờ thực sự thảo luận về nó một cách rõ ràng. Vâng, điều đó thay đổi bây giờ vì chúng ta sẽ thảo luận về khởi tạo biến một cách chi tiết ở đây.

Vậy khởi tạo chính xác là gì? Vâng, như tên gọi của nó, khi một giá trị được gán cho một biến lần đầu tiên, thì đó được gọi là khởi tạo biến. Ví dụ:
Mã:
int a = 1;
Bây giờ, điều này cũng được gọi là khởi tạo rõ ràng. Lý do là, ngay cả khi bạn không gán giá trị cho một biến như 'a' và cố gắng in giá trị của biến, bạn sẽ thấy một số giá trị ngẫu nhiên.

Ví dụ, hãy xem xét mã sau:
Mã:
#include 

int main()
{
 int a;
 printf("a = %d", a);

 return 0;
}
Khi tôi thực thi mã này, tôi nhận được 'a' là '0'. Nhưng điều này không phải lúc nào cũng đúng vì các biến tự động như 'a' được khởi tạo thành các giá trị ngẫu nhiên khi không có khởi tạo rõ ràng. Đó là lý do tại sao người ta luôn đề xuất khởi tạo chúng một cách rõ ràng bằng một giá trị, chẳng hạn như '0', để tránh sử dụng nhầm giá trị rác.

Lưu ý rằng chỉ các biến tự động mới nhận được giá trị rác nếu không được khởi tạo. Các biến tĩnh và toàn cục nhận được '0' làm giá trị ban đầu của chúng ngay cả khi bạn không gán giá trị rõ ràng. Sau đây là một ví dụ:
Mã:
int x;

void func();
{
 static int b;
 
 //statements 

 b++;
}

int main()
{
 int a;

 //statements
 
 func();
 return 0;
}
Trong đoạn mã trên, chắc chắn rằng các biến 'x' và 'b' sẽ được khởi tạo thành '0', nhưng không chắc chắn về giá trị mà biến 'a' sẽ chứa.

Tiếp theo, bạn chỉ có thể khởi tạo các biến tĩnh và biến toàn cục bằng các giá trị hằng số. Nói cách khác, không thể gán giá trị cho các biến tĩnh và toàn cục theo các biến khác.

Sau đây là một ví dụ:
Mã:
#include 

int k;
int x = k;

void func()
{
 int z = 2;
 
 static int b = z;
 b++;
}

int main()
{
 int a;
 printf("a = %d", a);
 
 func();
 return 0;
}
Khi biên dịch mã này, tôi gặp các lỗi sau:
Mã:
main.c:12:9: error: phần tử khởi tạo không phải là constant int x = k; ^main.c: Trong hàm ‘func’:main.c:18:20: error: phần tử khởi tạo không phải là hằng số static int b = z; ^
Vì 'x' là toàn cục và 'b' là tĩnh, bạn có thể thấy trình biên dịch nói rõ rằng các phần tử khởi tạo không phải là hằng số. Vì vậy, điều này khẳng định lại thực tế rằng chỉ có thể sử dụng hằng số để khởi tạo các biến toàn cục và biến tĩnh.

Tiếp theo, mảng cũng có thể được khởi tạo theo nhiều cách khác nhau. Ví dụ, một cách để khởi tạo là:
Mã:
int arr[] = {1,2,3,4,5};
Theo cách này, kích thước của mảng được tính bằng cách đếm số phần tử khởi tạo. Vì vậy, trong ví dụ này, mảng 'arr' có kích thước là 5, với các giá trị 1-5 là các phần tử của nó (theo thứ tự đó).

Tiếp theo, giả sử kích thước của mảng được xác định trước và bạn khởi tạo mảng bằng phương pháp trên. Sau đây là một ví dụ:
Mã:
int arr[5] = {1,2,3,4};
Sau đó, trong trường hợp này, bốn phần tử đầu tiên sẽ được chọn từ danh sách được cung cấp trong {} và phần tử cuối cùng sẽ là '0'. Vâng, bạn có thể cung cấp ít phần tử hơn kích thước của mảng theo cách này và để trình biên dịch xử lý phần còn lại bằng cách khởi tạo chúng với '0'.

Ví dụ, chương trình sau:
Mã:
#include 

int main()
{
 int arr[10] = {1,2,3,4,5};
 int i = 0;
 
 for(i=0;i
 
Back
Bên trên