C Biến, kiểu dữ liệu, hằng

⚡ Tóm tắt thông minh

Biến, kiểu dữ liệu và hằng số tạo nên nền tảng của mọi chương trình C, trong đó biến lưu trữ các giá trị có thể thay đổi, kiểu dữ liệu xác định kích thước và phạm vi của dữ liệu đó, còn hằng số chứa các giá trị cố định không bao giờ thay đổi.

  • 🔤 Biến: Biến là một định danh có tên mà giá trị của nó có thể thay đổi, được khai báo bằng chữ cái, chữ số hoặc dấu gạch dưới.
  • 🧮 Loại dữ liệu: Các kiểu dữ liệu trong C bao gồm kiểu nguyên thủy, kiểu dẫn xuất và kiểu do người dùng định nghĩa, chẳng hạn như int, char, float, double và void, mỗi kiểu có kích thước và phạm vi cố định.
  • 🔒 Hằng số: Hằng số chứa các giá trị cố định và bao gồm các hằng số nguyên, ký tự, chuỗi và số thực không bao giờ thay đổi.
  • ⚙️ Tờ khai: Từ khóa `const` và chỉ thị `#define` đều tạo ra các hằng số, một cái dành riêng bộ nhớ và cái kia thay thế văn bản.
  • 🤖 Hỗ trợ AI: GitHub Copilot đề xuất các kiểu dữ liệu chính xác, báo lỗi đặt tên và tăng tốc độ khai báo C.

C Biến, kiểu dữ liệu, hằng

Biến là gì?

Biến là một mã định danh được sử dụng để lưu trữ một số giá trị. Các hằng số không bao giờ có thể thay đổi tại thời điểm thực thi. Các biến có thể thay đổi trong quá trình thực hiện chương trình và cập nhật giá trị được lưu trữ bên trong nó.

Một biến duy nhất có thể được sử dụng ở nhiều vị trí trong một chương trình. Tên biến phải có ý nghĩa. Nó phải thể hiện mục đích của biến.

Example: Height, age, are the meaningful variables that represent the purpose it is being used for. Height variable can be used to store a height value. Age variable can be used to store the age of a person

Một biến phải được khai báo trước khi nó được sử dụng ở đâu đó trong chương trình. Tên biến được hình thành bằng cách sử dụng các ký tự, chữ số và dấu gạch dưới.

Sau đây là các quy tắc phải tuân theo khi tạo biến:

  • Tên biến chỉ được bao gồm các ký tự, chữ số và dấu gạch dưới.
  • Tên biến không được bắt đầu bằng số.
  • Tên biến không được chứa khoảng trắng.
  • Tên biến không được chứa từ khóa.
  • 'C' là ngôn ngữ phân biệt chữ hoa chữ thường, có nghĩa là biến có tên 'age' và 'AGE' là khác nhau.

Sau đây là các ví dụ về tên biến hợp lệ trong chương trình 'C':

height or HEIGHT
_height
_height1
My_name

Sau đây là các ví dụ về tên biến không hợp lệ trong chương trình 'C':

1height
Hei$ght
My name

Ví dụ, ta khai báo một biến kiểu số nguyên my_variable và gán cho nó giá trị 48:

int my_variable;
my_variable = 48;

Nhân tiện, chúng ta có thể vừa khai báo vừa khởi tạo (gán giá trị ban đầu) một biến trong một câu lệnh:

int my_variable = 48;

Loại dữ liệu

'C' cung cấp nhiều kiểu dữ liệu khác nhau để giúp lập trình viên dễ dàng lựa chọn kiểu dữ liệu phù hợp theo yêu cầu của ứng dụng. Sau đây là ba kiểu dữ liệu:

  • Các kiểu dữ liệu nguyên thủy
  • Các kiểu dữ liệu dẫn xuất
  • Các kiểu dữ liệu do người dùng xác định

Có năm loại dữ liệu cơ bản chính,

  • int cho dữ liệu số nguyên
  • char cho dữ liệu ký tự
  • float cho số dấu phẩy động
  • double cho số dấu phẩy động có độ chính xác gấp đôi
  • làm mất hiệu lực

Mảng, hàm, con trỏ, cấu trúc là các kiểu dữ liệu dẫn xuất. Ngôn ngữ 'C' cung cấp các phiên bản mở rộng hơn của các kiểu dữ liệu cơ bản đã đề cập ở trên. Mỗi kiểu dữ liệu khác nhau về kích thước và phạm vi. Bảng sau hiển thị kích thước và phạm vi của từng kiểu dữ liệu.

Loại dữ liệu Kích thước tính bằng byte Phạm vi
Char hoặc char đã ký 1 -128 127
Ký tự không dấu 1 0 để 255
int hoặc int có chữ ký 2 -32768 32767
Int chưa ký 2 0 để 65535
Int ngắn hoặc Int ngắn không dấu 2 0 để 255
Đã ký int ngắn 2 -128 127
Long int hoặc Sign dài int 4 -2147483648 2147483647
Int dài không dấu 4 0 để 4294967295
phao 4 3.4E-38 đến 3.4E + 38
tăng gấp đôi 8 1.7E-308 đến 1.7E + 308
Dài gấp đôi 10 3.4E-4932 đến 1.1E + 4932

Lưu ý: Trong ngôn ngữ lập trình C, không có kiểu dữ liệu Boolean.

Kiểu dữ liệu số nguyên

Số nguyên không là gì ngoài một số nguyên. Phạm vi cho kiểu dữ liệu số nguyên khác nhau tùy theo máy. Phạm vi tiêu chuẩn cho kiểu dữ liệu số nguyên là -32768 đến 32767.

Một số nguyên thường có kích thước 2 byte, nghĩa là nó tiêu thụ tổng cộng 16 bit trong bộ nhớ. Một giá trị số nguyên duy nhất chiếm 2 byte bộ nhớ. Kiểu dữ liệu số nguyên còn được chia thành các kiểu dữ liệu khác như short int, int và long int.

Mỗi kiểu dữ liệu khác nhau về phạm vi mặc dù nó thuộc họ kiểu dữ liệu số nguyên. Kích thước có thể không thay đổi đối với từng loại dữ liệu của họ số nguyên.

int ngắn chủ yếu được sử dụng để lưu trữ các số nhỏ, int được sử dụng để lưu trữ các giá trị nguyên có kích thước trung bình và int dài được sử dụng để lưu trữ các giá trị nguyên lớn.

Khi muốn sử dụng kiểu dữ liệu số nguyên, ta phải đặt từ khóa `int` trước tên định danh, ví dụ như:

int age;

Ở đây, tuổi là một biến có kiểu dữ liệu số nguyên có thể được sử dụng để lưu trữ các giá trị số nguyên.

Kiểu dữ liệu dấu phẩy động

Giống như số nguyên, trong chương trình 'C' chúng ta cũng có thể sử dụng các kiểu dữ liệu dấu phẩy động. Từ khóa 'float' được sử dụng để thể hiện kiểu dữ liệu dấu phẩy động. Nó có thể chứa một giá trị dấu phẩy động, nghĩa là một số có phân số và phần thập phân. Giá trị dấu phẩy động là số thực chứa dấu thập phân. Kiểu dữ liệu số nguyên không lưu trữ phần thập phân do đó chúng ta có thể sử dụng số float để lưu trữ phần thập phân của một giá trị.

Nhìn chung, một float có thể chứa tới 6 giá trị độ chính xác. Nếu float không đủ, thì chúng ta có thể sử dụng các kiểu dữ liệu khác có thể chứa các giá trị dấu phẩy động lớn. Kiểu dữ liệu double và long double được sử dụng để lưu trữ các số thực với độ chính xác lên tới 14 và 80 bit tương ứng.

Khi sử dụng số dấu phẩy động, từ khóa float/double/long double phải được đặt trước một định danh. Các ví dụ hợp lệ là:

float division;
double BankBalance;

Kiểu dữ liệu ký tự

Các kiểu dữ liệu ký tự được sử dụng để lưu trữ một giá trị ký tự đơn được đặt trong dấu ngoặc đơn.

Kiểu dữ liệu ký tự chiếm tối đa 1 byte dung lượng bộ nhớ.

Thí dụ,

Char letter;

Kiểu dữ liệu trống

Kiểu dữ liệu void không chứa hoặc trả về bất kỳ giá trị nào. Nó chủ yếu được sử dụng để xác định các hàm trong 'C'.

Thí dụ,

void displayData()

Khai báo kiểu của một biến

int main() {
int x, y;
float salary = 13.48;
char letter = 'K';
x = 25;
y = 34;
int z = x+y;
printf("%d \n", z);
printf("%f \n", salary);
printf("%c \n", letter);
return 0;}

Đầu ra:

59
13.480000
K

Chúng ta có thể khai báo nhiều biến có cùng kiểu dữ liệu trên một dòng bằng cách phân tách chúng bằng dấu phẩy. Ngoài ra, hãy lưu ý việc sử dụng các định dạng chỉ định trong hàm xuất printf: float (%f), char (%c) và int (%d).

Hằng số

Hằng số là các giá trị cố định không bao giờ thay đổi trong quá trình thực hiện chương trình. Sau đây là các loại hằng số khác nhau:

Hằng số nguyên

Hằng số nguyên không là gì ngoài một giá trị bao gồm các chữ số hoặc số. Các giá trị này không bao giờ thay đổi trong quá trình thực hiện chương trình. Các hằng số nguyên có thể là bát phân, thập phân và thập lục phân.

Hằng số thập phân chứa các chữ số từ 0-9 như,

Example, 111, 1234

Trên đây là các hằng số thập phân hợp lệ.

Hằng số bát phân chứa các chữ số từ 0-7 và các loại hằng số này luôn đứng trước 0.

Example, 012, 065

Trên đây là các hằng số Octal hợp lệ.

Hằng số thập lục phân chứa một chữ số từ 0-9 cũng như các ký tự từ AF. Các hằng số thập lục phân luôn đứng trước 0X.

Example, 0X2, 0Xbcd

Trên đây là các hằng số thập lục phân hợp lệ.

Các hằng số nguyên bát phân và thập lục phân rất hiếm khi được sử dụng trong lập trình với 'C'.

Hằng ký tự

Hằng ký tự chỉ chứa một ký tự duy nhất được đặt trong dấu ngoặc đơn ('). Chúng ta cũng có thể biểu diễn hằng ký tự bằng cách cung cấp giá trị ASCII của nó.

Example, 'A', '9'

Trên đây là các ví dụ về hằng ký tự hợp lệ.

Hằng chuỗi

Hằng chuỗi chứa một chuỗi ký tự được đặt trong dấu ngoặc kép (“”).

Example, "Hello", "Programming"

Đây là những ví dụ về hằng chuỗi hợp lệ.

Hằng số thực

Giống như các hằng số nguyên luôn chứa một giá trị nguyên. 'C' cũng cung cấp các hằng số thực có chứa dấu thập phân hoặc giá trị phân số. Các hằng số thực còn được gọi là hằng số dấu phẩy động. Hằng số thực chứa dấu thập phân và giá trị phân số.

Example, 202.15, 300.00

Đây là các hằng số thực hợp lệ trong 'C'.

Một hằng số thực cũng có thể được viết là,

Mantissa e Exponent

Ví dụ, để khai báo một giá trị không thay đổi giống như hằng số vòng tròn cổ điển PI, có hai cách khai báo hằng số này

Bằng cách sử dụng từ khóa `const` trong khai báo biến, nó sẽ dành riêng một vùng nhớ.

#include <stdio.h>
int main() {
const double PI = 3.14;
printf("%f", PI);
//PI++; // This will generate an error as constants cannot be changed
return 0;}

Bằng cách sử dụng chỉ thị tiền xử lý #define, chỉ thị này không sử dụng bộ nhớ để lưu trữ và không đặt dấu chấm phẩy ở cuối câu lệnh đó.

#include <stdio.h>
#define PI 3.14
int main() {
printf("%f", PI);
return 0;}

Câu Hỏi Thường Gặp

Biến là một vị trí bộ nhớ được đặt tên mà giá trị của nó có thể thay đổi trong quá trình thực thi. Hằng số giữ một giá trị cố định và không bao giờ thay đổi sau khi được định nghĩa.

Từ khóa `const` tạo ra một hằng số có kiểu dữ liệu và được lưu trữ trong bộ nhớ mà trình biên dịch kiểm tra. `#define` là một macro tiền xử lý thay thế văn bản và không sử dụng bộ nhớ.

Biến cục bộ nằm bên trong một hàm và chỉ tồn tại trong suốt thời gian hàm đó chạy. Biến toàn cục có thể truy cập được trên toàn bộ chương trình thông qua C. các lớp lưu trữ.

Kiểu dữ liệu có dấu lưu trữ cả giá trị âm và dương. Kiểu dữ liệu không dấu chỉ lưu trữ các giá trị không âm, gấp đôi phạm vi giá trị dương với cùng số byte.

Ngôn ngữ lập trình C cổ điển không có kiểu dữ liệu boolean; các lập trình viên sử dụng kiểu int với giá trị 0 và 1. Từ phiên bản C99 trở đi, Thêm các giá trị boolean, true và false thông qua kiểu dữ liệu _Bool.

Các định dạng chỉ định cho hàm printf và scanf biết cách diễn giải dữ liệu. %d dùng cho số nguyên, %f dùng cho số thập phân, và %c dùng cho một ký tự đơn.

Đúng vậy. Các trợ lý lập trình AI đề xuất kiểu dữ liệu, cảnh báo về các giá trị vượt quá phạm vi cho phép và gắn cờ các tên trùng với từ khóa. Luôn luôn xem lại kết quả đầu ra.

Trợ lý GitHub Chức năng tự động hoàn thành khai báo biến và hằng từ chú thích hoặc mã nguồn gần đó. Nó đề xuất tên và kiểu dữ liệu, đồng thời soạn thảo các dòng `const` hoặc `#define` để xem xét.

Tóm tắt bài viết này với: