Cheat sheet C
Cập nhật lần cuối
Hello World và cấu trúc chương trình
Mọi chương trình C đều bắt đầu từ main và trả về một int.
| Thành phần | Code |
|---|---|
| Khai báo header | #include <stdio.h> |
| Điểm bắt đầu chương trình | int main(void) { ... } |
| Có tham số dòng lệnh | int main(int argc, char *argv[]) { ... } |
| In một dòng | printf("Hello, World!\n"); |
| Trả về thành công | return 0; |
| Chú thích một dòng | // comment |
| Chú thích nhiều dòng | /* comment */ |
Kiểu dữ liệu
Kích thước phụ thuộc vào nền tảng; các mức tối thiểu dưới đây được tiêu chuẩn bảo đảm.
| Kiểu | Mô tả |
|---|---|
int | Số nguyên, tối thiểu 16 bit (thường là 32) |
unsigned int | Số nguyên không âm |
long / long long | Số nguyên rộng hơn (tối thiểu 32 / 64 bit) |
float / double | Số thực dấu phẩy động độ chính xác đơn / kép |
char | Một byte, cũng dùng để lưu ký tự |
_Bool (bool qua <stdbool.h>) | true hoặc false |
size_t | Kiểu không dấu cho kích thước và chỉ số |
void | Không có kiểu: dùng cho hàm và con trỏ tổng quát |
Định dạng printf và scanf
Các ký hiệu giữ chỗ khớp với kiểu của từng đối số.
| Định dạng | Khớp với |
|---|---|
%d / %i | int có dấu |
%u | int không dấu |
%ld / %lld | long / long long |
%f | double (và float trong printf) |
%.2f | double với 2 chữ số thập phân |
%c | Một char |
%s | Chuỗi (char *) |
%p | Địa chỉ con trỏ |
%x | int không dấu ở dạng thập lục phân |
%zu | size_t |
Toán tử
| Toán tử | Ý nghĩa |
|---|---|
+ - * / % | Số học (% là phép chia lấy dư số nguyên) |
== != | Bằng / khác |
< > <= >= | So sánh |
&& || ! | Logic và / hoặc / phủ định |
& | ^ ~ << >> | Thao tác bit: and, or, xor, not, dịch bit |
++ -- | Tăng / giảm 1 |
+= -= *= /= | Gán kết hợp |
cond ? a : b | Toán tử điều kiện ba ngôi |
sizeof(x) | Kích thước của kiểu hoặc biến, tính bằng byte |
Luồng điều khiển
| Câu lệnh | Cú pháp |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Else if | else if (x == 0) { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Vòng lặp while | while (i < n) { ... } |
| Vòng lặp do-while | do { ... } while (i < n); |
| Vòng lặp for | for (int i = 0; i < n; i++) { ... } |
| Break / continue | break; thoát khỏi vòng lặp, continue; chuyển sang lần lặp tiếp theo |
| Goto (hiếm dùng) | goto label; ... label: |
Hàm
Khai báo trước khi dùng, hoặc thêm prototype ở đầu tệp.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa hàm | int add(int a, int b) { return a + b; } |
| Prototype (khai báo) | int add(int a, int b); |
| Không có giá trị trả về | void greet(void) { ... } |
| Không có tham số | int rand_seed(void) { ... } |
| Truyền con trỏ (để thay đổi giá trị) | void inc(int *p) { (*p)++; } |
| Truyền mảng | int sum(int arr[], int n) { ... } |
| Static (chỉ dùng trong tệp) | static int helper(void) { ... } |
Con trỏ và bộ nhớ
Con trỏ lưu một địa chỉ. Bộ nhớ heap phải được giải phóng thủ công.
| Thao tác | Cú pháp |
|---|---|
| Khai báo con trỏ | int *p; |
| Lấy địa chỉ | p = &x; |
| Giải tham chiếu (đọc/ghi) | int y = *p; / *p = 10; |
| Con trỏ null | int *p = NULL; |
| Cấp phát trên heap | int *a = malloc(n * sizeof(int)); |
| Cấp phát và gán bằng 0 | int *a = calloc(n, sizeof(int)); |
| Thay đổi kích thước vùng cấp phát | a = realloc(a, newSize); |
| Giải phóng bộ nhớ heap | free(a); |
| Số học con trỏ | *(a + i) tương đương a[i] |
Mảng và chuỗi
Chuỗi trong C là mảng char kết thúc bằng \0.
| Thao tác | Cú pháp |
|---|---|
| Khai báo mảng | int nums[5]; |
| Khởi tạo mảng | int nums[] = {1, 2, 3}; |
| Truy cập phần tử | nums[0] = 10; |
| Độ dài mảng (mảng trên stack) | sizeof(nums) / sizeof(nums[0]) |
| Chuỗi hằng | char s[] = "hello"; |
| Độ dài chuỗi | strlen(s) (không tính \0) |
| Sao chép chuỗi | strcpy(dst, src); |
| So sánh chuỗi | strcmp(a, b) == 0 nghĩa là bằng nhau |
| Nối chuỗi | strcat(dst, src); |
Struct và thư viện chuẩn thường dùng
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa struct | struct Point { int x; int y; }; |
| Khai báo và truy cập | struct Point p; p.x = 1; |
| Truy cập qua con trỏ | p->x = 1; (tương đương (*p).x) |
| Đặt tên khác cho kiểu | typedef struct Point Point; |
| Đọc dữ liệu nhập | scanf("%d", &n); |
| Chuyển chuỗi thành int | int n = atoi("42"); |
| Giá trị tuyệt đối / lũy thừa | abs(x) (int), pow(x, y) từ <math.h> |
| Sắp xếp mảng | qsort(arr, n, sizeof(int), cmp); |
Cú pháp C, các định dạng (format specifier) và mẫu dùng con trỏ mà bạn cần nhiều nhất, gom trong một trang. Cheat sheet C này là bảng tra cứu nhanh khi viết C: kiểu dữ liệu, định dạng printf/scanf, toán tử, luồng điều khiển, cùng các thao tác con trỏ và bộ nhớ hay khiến người học bối rối.
Mọi thứ ở đây đều là C chuẩn (C99/C11) và biên dịch được bằng gcc hoặc clang. Sao chép phần bạn cần, hoặc chạy thử bất kỳ đoạn code nào ngay trong playground C, không cần cài trình biên dịch. Đang học C? Khóa học C tương tác miễn phí của Coddy giúp bạn thực hành con trỏ, bộ nhớ và thư viện chuẩn.
Câu hỏi thường gặp về cheat sheet C
Cheat sheet C này có miễn phí không?
Có. Cheat sheet C này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra một kiểu dữ liệu, định dạng hay thao tác con trỏ.
Stack và heap trong C khác nhau thế nào?
malloc hoặc calloc, tồn tại đến khi bạn gọi free, và được dùng khi bạn cần vùng nhớ sống lâu hơn hàm hiện tại hoặc có kích thước chỉ biết lúc chạy. Quên free bộ nhớ heap sẽ gây rò rỉ bộ nhớ (memory leak).Vì sao scanf cần dấu & còn printf thì không?
scanf ghi giá trị ngược vào biến của bạn, nên nó cần địa chỉ của biến, và &x chính là địa chỉ đó. printf chỉ đọc giá trị, nên bạn truyền thẳng giá trị. Ngoại lệ là chuỗi: mảng char vốn đã tự chuyển thành con trỏ, nên bạn viết scanf("%s", name) mà không cần &.Có thể luyện tập C online không?
Có. Mở playground C để biên dịch và chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài trình biên dịch. Khi muốn học có lộ trình, khóa học C tương tác miễn phí của Coddy đưa bạn đi từng bước từ biến và vòng lặp đến con trỏ và quản lý bộ nhớ.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung được sắp xếp từ những thành phần cơ bản hay dùng nhất (kiểu dữ liệu, printf, luồng điều khiển) đến phần nâng cao (con trỏ, bộ nhớ, struct), nên bạn có thể dùng các phần đầu ngay từ ngày đầu tiên rồi dần làm chủ phần còn lại.