Hướng dẫn cơ bản về Constants trong C

Xin chào các bạn học lập trình! Hôm nay, chúng ta sẽ khám phá thế giới các hằng số trong lập trình C. Là người thầy thân thiện trong khu phố máy tính, tôi ở đây để hướng dẫn bạn qua khái niệm quan trọng này. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - chúng ta sẽ bắt đầu từ đầu và dần dần xây dựng kiến thức. Hãy chuẩn bị đồ uống yêu thích của bạn, thư giãn và cùng nhau bắt đầu cuộc phiêu lưu lập trình này!

C - Constants

什么是 Constants?

Trước khi chúng ta đi vào chi tiết, hãy hiểu hằng số là gì. Trong lập trình, hằng số giống như một bình chứa giữ giá trị không thay đổi suốt quá trình thực thi của chương trình. Hãy tưởng tượng nó như một hộp đặc biệt nơi bạn đặt thứ quý giá và khóa lại - một khi đã ở trong đó, nó sẽ không thay đổi!

Bây giờ, hãy cùng tìm hiểu hai cách chính để định nghĩa hằng số trong C.

Định nghĩa hằng số bằng từ khóa const

Phương pháp đầu tiên chúng ta sẽ xem xét là sử dụng từ khóa const. Đây là cách đơn giản để tạo ra các hằng số an toàn về loại (nghĩa là trình biên dịch sẽ kiểm tra xem bạn có sử dụng đúng loại dữ liệu hay không).

Dưới đây là cách bạn làm:

const int MAX_STUDENTS = 30;
const float PI = 3.14159;
const char GRADE_A = 'A';

Hãy phân tích:

  1. Chúng ta bắt đầu bằng từ khóa const.
  2. Sau đó, chúng ta chỉ định loại dữ liệu (int, float, char, v.v.).
  3. Kế tiếp, chúng ta đặt tên cho hằng số (thường là in HOÀNG HỘP, để dễ dàng nhận biết hằng số).
  4. Cuối cùng, chúng ta gán giá trị cho hằng số.

Bây giờ, hãy xem cách chúng ta có thể sử dụng các hằng số này trong một chương trình:

#include <stdio.h>

int main() {
const int MAX_STUDENTS = 30;
int current_students = 28;

printf("Lớp có thể có tối đa %d học sinh.\n", MAX_STUDENTS);
printf("Hiện tại, có %d học sinh trong lớp.\n", current_students);

if (current_students < MAX_STUDENTS) {
printf("Còn chỗ cho %d học sinh!\n", MAX_STUDENTS - current_students);
} else {
printf("Lớp đã đầy!");
}

return 0;
}

Trong ví dụ này, chúng ta sử dụng hằng số MAX_STUDENTS để kiểm tra xem có chỗ cho học sinh mới trong lớp hay không. Điểm tuyệt vời của việc sử dụng hằng số ở đây là nếu chúng ta cần thay đổi kích thước lớp học tối đa, chúng ta chỉ cần thay đổi nó ở một nơi!

Định nghĩa hằng số bằng chỉ thị #define

Bây giờ, hãy xem xét một cách khác để định nghĩa hằng số - sử dụng chỉ thị preprocessor #define. Phương pháp này khác một chút và có những đặc điểm riêng.

Dưới đây là cú pháp:

#define MAX_STUDENTS 30
#define PI 3.14159
#define GRADE_A 'A'

Chú ý một số điểm:

  1. Chúng ta không chỉ định loại dữ liệu.
  2. Chúng ta không sử dụng dấu bằng (=).
  3. Chúng ta không kết thúc dòng bằng dấu chấm phẩy (;).

Hãy xem cách chúng ta có thể sử dụng chúng trong một chương trình:

#include <stdio.h>

#define MAX_SCORE 100
#define PASSING_PERCENTAGE 60

int main() {
int student_score = 75;
float passing_score = (float)MAX_SCORE * PASSING_PERCENTAGE / 100;

printf("Điểm tối đa là %d.\n", MAX_SCORE);
printf("Điểm đạt là %.2f.\n", passing_score);

if (student_score >= passing_score) {
printf("Chúc mừng! Bạn đã vượt qua bài kiểm tra với điểm số %d.\n", student_score);
} else {
printf("Thật đáng tiếc, bạn không đạt. Điểm của bạn là %d.\n", student_score);
}

return 0;
}

Trong ví dụ này, chúng ta sử dụng các hằng số để tính điểm đạt và xác định xem học sinh có đạt bài kiểm tra hay không. Các hằng số #define được thay thế bằng giá trị của chúng trước khi chương trình được biên dịch, điều này có thể dẫn đến hành vi không mong muốn nếu bạn không cẩn thận!

Thay đổi giá trị của hằng số

Bây giờ, hãy xem điều thú vị. Nhớ khi tôi nói rằng hằng số giống như những hộp khóa? Đó là phần lớn sự thật, nhưng có một ngoại lệ.

Các hằng số được định nghĩa bằng const thực sự không thay đổi - bạn không thể thay đổi giá trị của chúng một khi đã được đặt. Nếu bạn thử, trình biên dịch sẽ báo lỗi. Ví dụ:

const int MY_CONSTANT = 10;
MY_CONSTANT = 20; // Đây sẽ gây ra lỗi biên dịch

Tuy nhiên, các hằng số được định nghĩa bằng #define lại khác. Vì chúng được xử lý trước khi biên dịch, bạn thực sự có thể định nghĩa lại chúng sau này trong mã của bạn. Nhưng hãy cẩn thận - điều này có thể gây ra sự nhầm lẫn và lỗi nếu không sử dụng khôn ngoan!

#include <stdio.h>

#define MY_CONSTANT 10

int main() {
printf("MY_CONSTANT là %d\n", MY_CONSTANT);

#undef MY_CONSTANT
#define MY_CONSTANT 20

printf("MY_CONSTANT bây giờ là %d\n", MY_CONSTANT);

return 0;
}

Chương trình này sẽ output:

MY_CONSTANT là 10
MY_CONSTANT bây giờ là 20

Mặc dù điều này có thể thực hiện được, nhưng nó thường không được khuyến khích vì nó có thể làm cho mã của bạn khó hiểu và duy trì hơn.

Kết luận

Hằng số là công cụ mạnh mẽ trong lập trình C. Chúng giúp mã của chúng ta dễ đọc, dễ bảo trì và ít bị lỗi hơn. Việc bạn chọn sử dụng const hay #define phụ thuộc vào nhu cầu cụ thể của bạn, nhưng cả hai đều có vị trí trong bộ công cụ của một nhà lập trình C.

Nhớ rằng, lập trình là một hành trình, và việc nắm vững hằng số chỉ là một bước trong hành trình đó. Hãy tiếp tục thực hành, giữ vững sự tò mò và đừng ngại thử nghiệm. Trước khi bạn biết, bạn sẽ viết các chương trình phức tạp một cách dễ dàng!

Dưới đây là bảng tham khảo nhanh cho các phương pháp chúng ta đã thảo luận:

Phương pháp Cú pháp Kiểm tra loại Phạm vi Có thể định nghĩa lại
const const type NAME = value; Cấp block Không
#define #define NAME value Không Toàn cục

Chúc các bạn lập trình vui vẻ, các nhà lập trình tương lai! Nhớ rằng, trong thế giới của hằng số, sự thay đổi là duy nhất không thay đổi. (Bạn có hiểu không? Một chút hài hước của người lập trình!) ?

Credits: Image by storyset