Khoá học lập trình C/C++ Dành cho người mới bắt đầu [Video] Tìm hiểu biến & kiểu dữ liệu trong C - Lập trình C
- 5.0/5.0
- 2k Đăng ký
- Học lập trình
- Tiếng việt
Thông tin khóa học
Mở bài
Khi bắt đầu học lập trình, một trong những nấc thang đầu tiên và quan trọng nhất bạn phải chinh phục là biến & kiểu dữ liệu trong C. Hiểu rõ biến và kiểu dữ liệu không chỉ giúp chương trình chạy đúng — mà còn quyết định hiệu năng, độ an toàn khi quản lý bộ nhớ và khả năng mở rộng của ứng dụng. Với ngôn ngữ C, nơi lập trình viên thường trực tiếp thao tác với bộ nhớ, nắm vững các khái niệm này là điều bắt buộc để tránh lỗi khó phát hiện như truy cập vùng nhớ sai, overflow hay undefined behavior.
Bài viết này được viết dành cho người mới lẫn người đã có chút nền tảng muốn hệ thống lại kiến thức: từ khái niệm, cách khai báo, kích thước các kiểu dữ liệu cơ bản, đến phạm vi (scope), thời gian sống (lifetime), con trỏ, mảng, struct và những lưu ý khi chuyển đổi kiểu. Mục tiêu là bạn sẽ rời khỏi trang này với tư duy thực tế: biết khi nào dùng int, khi nào dùng long long, vì sao dùng float hay double, và quan trọng nhất — làm thế nào để tránh lỗi phổ biến khi thao tác với biến.
Trong suốt bài, cụm từ biến & kiểu dữ liệu trong C sẽ được lặp lại một cách tự nhiên để nhấn mạnh chủ đề trọng tâm — đồng thời giúp bạn dễ search, đối chiếu và ghi nhớ tri thức nền tảng. Hãy chuẩn bị một trình biên dịch (gcc/clang) và thực hành các ví dụ để nhận thấy sự khác biệt ngay lập tức.
Khái niệm cơ bản: biến là gì, kiểu dữ liệu là gì?
Trong ngôn ngữ lập trình C, biến đại diện cho một vị trí nhớ được đặt tên để lưu trữ giá trị, còn kiểu dữ liệu xác định loại giá trị và cách máy tính đọc/ghi dữ liệu đó. Khi nói về biến & kiểu dữ liệu trong C, ta cần nhớ hai thành tố chính: tên biến (identifier) và kiểu (type). Kiểu dữ liệu không chỉ xác định phạm vi giá trị có thể lưu, mà còn xác định kích thước (số byte) và cách biểu diễn bit trong bộ nhớ.
Ví dụ khai báo:
Ở đây int, char, float là các kiểu dữ liệu nguyên thủy (primitive types). Việc chọn kiểu phù hợp giúp tiết kiệm bộ nhớ và tránh overflow (tràn số). Với C, hiểu chi tiết về kích thước kiểu (ví dụ sizeof(int)) và dấu hiệu signed/unsigned là mấu chốt để xử lý dữ liệu chính xác.
Một số điểm cần lưu ý khi nghiên cứu biến & kiểu dữ liệu trong C:
-
Mỗi biến có địa chỉ và giá trị. Địa chỉ dùng khi thao tác với con trỏ.
-
Kiểu dữ liệu quyết định phép toán hợp lệ, ví dụ phép chia nguyên khác phép chia thực.
-
C là ngôn ngữ cho phép ép kiểu (casting) — cả an toàn và nguy hiểm nếu không kiểm soát.
Nắm chắc khái niệm này sẽ giúp bạn đi sâu vào phần khai báo, phạm vi và quản lý bộ nhớ một cách tự tin.
Các kiểu dữ liệu nguyên thủy trong C: int, char, float, double, void
C cung cấp một số kiểu cơ bản mà mọi chương trình đều sử dụng. Khi ôn lại biến & kiểu dữ liệu trong C, hãy nhớ rằng mặc dù danh sách đơn giản, cách sử dụng ảnh hưởng lớn đến hành vi chương trình.
Kiểu số nguyên (int, short, long, long long)
-
intthường dùng để lưu số nguyên. Kích thước phụ thuộc nền tảng (thường 4 byte trên hệ 32/64-bit). -
short(ít byte hơn),longvàlong long(nhiều byte hơn) dùng khi cần phạm vi lớn hơn. -
Có
signedvàunsignedđể chỉ có dấu hay không có dấu.
Ví dụ:
Kiểu ký tự (char)
-
charlưu ký tự hoặc số rất nhỏ (1 byte). -
Lưu ý:
charcó thể là signed hoặc unsigned tùy hệ thống.
Kiểu dấu phẩy động (float, double, long double)
-
float(độ chính xác đơn),double(độ chính xác kép). -
Dùng cho tính toán thực tế, nhưng phải hiểu sai số làm tròn (floating-point precision).
Kiểu không trả về (void)
-
voiddùng cho hàm không trả giá trị hoặc con trỏ không kiểuvoid *.
Sử dụng sizeof
Luôn kiểm tra kích thước kiểu trên nền tảng bằng sizeof:
Hiểu kích thước là quan trọng khi thao tác với bộ nhớ hoặc khi serialize dữ liệu.
Khi học biến & kiểu dữ liệu trong C, hãy luyện tập bằng cách in sizeof các kiểu và thử các hàm toán học để quan sát khác biệt giữa float và double.
Khai báo, khởi tạo và quy ước đặt tên biến
Khai báo biến là bước đầu tiên để biến tồn tại trong chương trình. Khi làm việc với biến & kiểu dữ liệu trong C, quy tắc rõ ràng và thói quen tốt sẽ giúp mã dễ đọc và ít lỗi.
Khai báo và khởi tạo
Khai báo: thông báo với trình biên dịch rằng tên biến và kiểu sẽ được dùng
Khởi tạo (khai báo và gán giá trị ngay lập tức):
Ưu tiên khởi tạo để tránh sử dụng biến chứa giá trị rác.
Quy tắc đặt tên biến
-
Bắt đầu bằng chữ cái hoặc gạch dưới
_, sau đó có thể có chữ số. -
Phân biệt chữ hoa/nhỏ:
value≠Value. -
Đặt tên có ý nghĩa:
int totalScoretốt hơnint ts.
Từ khóa và biến toàn cục vs cục bộ
-
Không đặt tên trùng với từ khóa C (
int,return,if, ...). -
Biến toàn cục (
global) khai báo ngoài hàm — có phạm vi toàn chương trình. Biến cục bộ khai báo trong hàm hoặc khối.
Khuyến nghị
-
Tuân thủ chuẩn code style (ví dụ
snake_casehoặccamelCase) trong dự án. -
Sử dụng
constcho hằng số, tránh lặp giá trị cố định trong mã:
Thực hành các ví dụ khai báo, gán và in ra màn hình để làm quen với hành vi biến trong C.
Phạm vi (scope) và thời gian sống (lifetime) của biến
Biết được phạm vi và thời gian sống (lifetime) của biến là thiết yếu khi quản lý bộ nhớ và tránh bug. Đây là phần quan trọng khi nghiên cứu biến & kiểu dữ liệu trong C.
Phạm vi (Scope)
-
Global scope: Biến khai báo ngoài hàm. Được truy cập bởi mọi hàm trong file (hoặc nhiều file nếu dùng
extern). -
Local scope (block scope): Biến khai báo trong hàm hoặc khối
{}chỉ tồn tại trong khối đó. -
Function scope (label): Dành cho nhãn (label) sử dụng trong
goto.
Ví dụ:
Thời gian sống (Lifetime)
-
Static lifetime: Biến toàn cục và biến
statictồn tại suốt chương trình chạy. -
Automatic lifetime: Biến cục bộ (không
static) được tạo khi thực thi vào block và hủy khi rời block — lưu trên stack. -
Dynamic lifetime: Bộ nhớ được cấp phát bằng
malloc/calloctồn tại cho đến khifree— lưu trên heap.
Ví dụ static:
Lưu ý thực hành
-
Tránh dùng quá nhiều biến toàn cục — gây khó bảo trì và lỗi đồng thời trong multithreading.
-
Khi dùng
malloc, luôn kiểm tra con trỏ trả về khác NULL vàfreesau khi dùng. -
Hiểu stack vs heap: stack là nhanh và tự động, heap là linh hoạt nhưng nguy cơ rò rỉ.
Khi đọc về biến & kiểu dữ liệu trong C, luôn thử các ví dụ minh họa để thấy khác biệt giữa các loại lifetime.
Kiểu dữ liệu phức tạp: mảng, struct, union, enum, con trỏ
Sau khi nắm loại nguyên thủy, bạn sẽ gặp các kiểu phức tạp cho phép tổ chức dữ liệu hiệu quả. Đây là phần thực hành cao khi học biến & kiểu dữ liệu trong C.
Mảng (Array)
Mảng lưu nhiều phần tử cùng kiểu, liên tiếp trong bộ nhớ.
Lưu ý: tên mảng khi truyền cho hàm hầu như tương đương con trỏ đến phần tử đầu.
Struct
struct cho phép gom nhiều trường với kiểu khác nhau thành một kiểu dữ liệu mới.
Dùng struct để model đối tượng thực tế: student, product, point,...
Union
union cho phép nhiều trường chia sẻ cùng vùng nhớ — hữu ích khi tiết kiệm bộ nhớ hoặc xử lý dữ liệu kiểu biến đổi.
Enum
enum định nghĩa hằng số nguyên có tên, giúp mã rõ ràng hơn.
Con trỏ (Pointer)
Con trỏ là đặc trưng của C: biến lưu địa chỉ bộ nhớ. Hiểu con trỏ là chìa khóa khi làm hệ thống và xử lý mảng/struct động.
Kết hợp con trỏ và malloc để tạo cấu trúc dữ liệu động: linked list, tree.
Thực hành an toàn
-
Luôn khởi tạo con trỏ (NULL nếu chưa gán).
-
Tránh dereference NULL hoặc con trỏ đã
free. -
Dùng
sizeofkhi cấp phát:malloc(n * sizeof(int)).
Các kiểu phức tạp này mở rộng khả năng quản lý dữ liệu, giúp bạn viết chương trình thực tế và linh hoạt hơn khi nghiên cứu biến & kiểu dữ liệu trong C.
Chuyển đổi kiểu, ép kiểu và vấn đề mất mát dữ liệu
Trong C, việc chuyển đổi giữa các kiểu — tự động (implicit) hoặc thủ công (explicit cast) — có thể đem lại kết quả không mong muốn nếu không cẩn thận. Khi học biến & kiểu dữ liệu trong C, bạn cần hiểu rõ quy tắc chuyển đổi và tránh loss of precision.
Chuyển đổi tự động (Implicit conversion)
Trình biên dịch tự convert khi kết hợp các kiểu khác nhau trong biểu thức:
Nhưng lưu ý phép chia hai số nguyên:
Để đúng: double z = (double)x / y;
Ép kiểu tường minh (Casting)
Việc ép kiểu làm rõ ý đồ của lập trình viên:
Ép kiểu có thể gây mất mát (truncation) hoặc overflow.
Vấn đề phổ biến
-
Precision loss: khi ép
doublesangfloathoặcint. -
Sign change: khi ép
signedsangunsigneddẫn đến giá trị lớn bất ngờ. -
Undefined behavior: khi ép con trỏ sang kiểu không tương thích và dereference.
Lời khuyên
-
Sử dụng casting chủ động khi cần, và chỉ casting khi hiểu rõ hậu quả.
-
Dùng
static_casttrong C++ (không áp dụng cho C) nếu sang C++ để an toàn hơn. -
Kiểm tra range trước khi thực hiện chuyển đổi (ví dụ khi đọc từ file, parse chuỗi).
Hiểu cách chuyển đổi kiểu và tác động của chúng giúp bạn viết mã an toàn hơn khi xử lý biến & kiểu dữ liệu trong C.
Lời khuyên thực tế, lỗi thường gặp và cách tránh
Khi ứng dụng kiến thức về biến & kiểu dữ liệu trong C, bạn sẽ tránh được nhiều lỗi tốn thời gian nếu áp dụng một số thói quen tốt.
Lỗi phổ biến
-
Sử dụng biến chưa khởi tạo: dẫn đến giá trị rác.
-
Dereference con trỏ NULL hoặc dangling pointer: crash chương trình.
-
Buffer overflow: viết vượt quá kích thước mảng.
-
Sai phạm vi biến: kỳ vọng biến cục bộ tồn tại ngoài hàm.
-
Tràn số (overflow): cộng/sub vượt quá phạm vi kiểu.
Cách phòng tránh
-
Luôn khởi tạo biến ngay khi khai báo nếu có thể.
-
Kiểm tra con trỏ sau
malloc:if (ptr == NULL) { /* xử lý */ }. -
Sử dụng hàm an toàn:
snprintfthaysprintf. -
Dùng
valgrind(Linux) hoặcAddressSanitizer(-fsanitize=address) để phát hiện rò rỉ bộ nhớ và lỗi truy cập. -
Viết test đơn vị cho các hàm xử lý dữ liệu.
Thực hành tốt
-
Giữ biến ở phạm vi nhỏ nhất cần thiết.
-
Dùng
constkhi giá trị không đổi để tránh gán nhầm. -
Ghi chú rõ kiểu và ý nghĩa biến bằng comment.
-
Áp dụng code review để bắt lỗi kiểu dữ liệu sớm.
Áp dụng những nguyên tắc này sẽ giúp bạn làm chủ biến & kiểu dữ liệu trong C và giảm thiểu lỗi ở giai đoạn triển khai.
Kết luận
Biến & kiểu dữ liệu trong C là nền tảng không thể thiếu để tiến tới những chủ đề nâng cao như quản lý bộ nhớ thủ công, tối ưu hóa hiệu năng và thiết kế cấu trúc dữ liệu phức tạp. Trong bài viết này, bạn đã được dẫn dắt qua toàn bộ chuỗi từ khái niệm cơ bản, các kiểu dữ liệu nguyên thủy, quy tắc khai báo và đặt tên, phạm vi và thời gian sống, đến các kiểu phức tạp như mảng, struct, union, enum và con trỏ. Bạn cũng thấy rõ tầm quan trọng của việc hiểu sizeof, signed/unsigned, và các hiểm họa khi chuyển đổi kiểu.
Hành trình thành thạo biến & kiểu dữ liệu trong C đòi hỏi thực hành lặp lại: viết ví dụ, debug với gdb/lldb, dùng sanitizer để phát hiện lỗi bộ nhớ, và đọc mã nguồn mở để học các pattern thực tế. Nếu bạn đang học, hãy đặt mục tiêu: mỗi ngày viết ít nhất một đoạn code minh họa, kiểm tra sizeof, thử ép kiểu có chủ đích, và sửa các lỗi phổ biến như buffer overflow hay sử dụng biến chưa khởi tạo.
Cuối cùng, nếu bạn muốn, mình có thể soạn sẵn bộ bài tập thực hành (có lời giải) tập trung vào biến, con trỏ và kiểu dữ liệu — hoặc hướng dẫn cài đặt công cụ kiểm thử như Valgrind và AddressSanitizer để bạn áp dụng ngay trên máy. Hãy bắt tay vào thực hành ngay hôm nay: viết, chạy, debug và lặp lại — đó chính là con đường nhanh nhất để làm chủ biến & kiểu dữ liệu trong C.
Đăng nhập để làm bài kiểm tra
Chưa có kết quả nào trước đó
Chương trình
Phản hồi từ học viên
5
Đánh giá
Câu hỏi thường gặp
B2. Đăng ký học
B3. Hoàn thành mua khoá học
B4. Thanh toán theo hướng dẫn
B5. Đợi chúng tôi kiểm tra thông tin và thêm bạn vào lớp học
Bước 1: Truy cập website https://qviet.vn/teacher/form
Bước 2: Điền thông tin theo yêu cầu. Để bản đăng ký được duyệt nhanh nhất, anh chị hãy điền đủ thông tin nhé.
Bước 3: Click vào "đăng ký ngay" để hoàn thành
Lưu ý:
Link video bài giảng mẫu: Video bài giảng mẫu là căn cứ để Trắc Nghiệm Việt duyệt về hình thức và chất lượng giảng dạy. Vì vậy anh chị hãy điền link này để đăng ký được duyệt nhanh nhất nhé.
Anh chị cũng nên mô tả kỹ về kinh nghiệm giảng dạy để Trắc Nghiệm Việt đánh giá nhé.
Chúc các anh chị và các bạn thành công, sớm gia nhập đội ngũ giảng viên Trắc Nghiệm Việt!
Hình thức học như thế nào?
Việc tạo thói quen học tập sẽ giúp bạn tăng khả năng đạt được mục tiêu. Dành thời gian để học và nhận lời nhắc bằng cách sử dụng công cụ quản lý học tập của bạn.Bước 1: Truy cập mục tài khoản, đăng nhập và chọn Quản lý học tập và ấn Thêm lịch học
Bước 2: Cài đặt lịch học tập của bạn:
- Đặt tiêu đề và chọn khóa học muốn tạo lịch học sau đó ấn tiếp tục.
- Cài đặt tần suất học, thời gian học, thời gian bắt đầu học, lịch thông báo nhắc nhở trước lúc bắt đầu học, ngày kết thúc sau đó bạn ấn tiếp tục.
- Bạn kiểm tra lại lịch học tập lần nữa, nếu đúng bạn ấn Hoàn thành.
- Nếu muốn chỉnh sửa, bạn ấn mục Quay lại và chỉnh lại.
- Khi tạo xong bạn có thể ấn thanh ngang bên phải để xóa, sửa lịch học.
Việc lên lịch học sẽ giúp em bạn dễ dàng đạt được các mục tiêu mong muốn, tăng hiệu quả học tập. Đặc biệt, khi bạn học được 90% nội dung khóa học, bạn sẽ nhận chứng nhận hoàn thành khóa học.
Hình thức học tại Trắc Nghiệm Việt
1. Học như thế nào?- Khóa học tại Trắc Nghiệm Việt được học **online** trên điện thoại hoặc máy tính có kết nối Internet.
- Các video bài giảng đã được biên tập sẵn, học viên có thể học bất cứ lúc nào, không giới hạn thời gian và số lần học.
- Chỉ cần đăng ký và thanh toán một lần.
2. Có thể học trên nhiều thiết bị không?
- Học viên có thể đăng nhập và học trên nhiều thiết bị khác nhau (điện thoại, máy tính, máy tính bảng). Tuy nhiên, tại cùng một thời điểm chỉ **một thiết bị** được phép xem video.
- Truy cập website: https://qviet.vn để đăng nhập và học.
- Với điện thoại hoặc máy tính bảng, học viên có thể tải ứng dụng Trắc Nghiệm Việt tại: https://qviet.vn
3. Có thể học trên Smart TV không?
- Trắc Nghiệm Việt đang phát triển để hỗ trợ học trực tiếp trên Smart TV. Hiện tại, tùy theo từng dòng TV mà có thể mở website và học được hoặc không.
- Bạn có thể thử bằng cách mở trình duyệt trên TV và truy cập: https://qviet.vn
- Trải nghiệm học tập tốt nhất hiện nay là trên **điện thoại** và **máy tính**.
4. Thời hạn sử dụng khóa học?
- Sau khi đăng ký, học viên sẽ sở hữu khóa học **vĩnh viễn**, có thể học đi học lại không giới hạn.
5. Có được tải khóa học về thiết bị không?
- Video bài giảng thuộc bản quyền của Trắc Nghiệm Việt và giảng viên. Học viên **không được tải xuống** dưới bất kỳ hình thức nào để tránh việc phát tán trái phép.
- Khóa học là tài sản trí tuệ và công sức của giảng viên, mong học viên hiểu và tôn trọng quyền sở hữu này.
- Bên dưới mỗi video có mục **Thảo luận**, bạn tích chọn và đặt câu hỏi tại đây. Thông thường trong vòng 24h giảng viên sẽ phản hồi lại bạn.
- Để xem câu trả lời của giảng viên, bạn vào mục **Thảo luận** của bài học đã đặt câu hỏi và tích vào mục trả lời để xem.
Học viên có thể liên hệ trực tiếp với giảng viên qua điện thoại, email, Facebook không?
- Khóa học online, giảng viên có hàng nghìn học viên trên cả nước nên việc liên hệ trực tiếp với giảng viên qua điện thoại là không tiện và Trắc Nghiệm Việt cam kết bảo mật thông tin cá nhân của giảng viên.
- Đa phần các khóa học, giảng viên hỗ trợ học viên qua **mục Thảo luận**. Một số khóa học giảng viên có thể hỗ trợ thêm qua email, Facebook, Zalo hoặc nhóm hỗ trợ trên Facebook. Trong những trường hợp này, giảng viên và Trắc Nghiệm Việt sẽ cung cấp thông tin liên hệ phù hợp.
Bình luận
Tổng quan khóa học
- Bài học 67
- Thời gian Linh hoạt
- Mức độ Mới bắt đầu
- Ngôn ngữ Tiếng việt
- Thời lượng Trọn đời
- Chứng chỉ Không
Trần Văn Điệp
Founder tại QViet.vn
- 5.0/5.0
Mình là Điệp, mình là lập trình viên Full Stack. Hiện mình là Senior Developer, mình là người yêu thích lập trình và viết các mã lệnh và yêu thích khi tạo ra những sản phẩm cho mình. Mình luôn thích thú mỗi khi tối ưu lại chức năng của từng chức năng, làm sao để nó trở lên tối ưu và smooth. Làm tăng trải nghiệm người dùng. Mình cũng rất thích tìm hiểu các công nghệ mới, tìm hiểu các tính năng mới trong các bản nâng cấp mới. Mảng mình làm việc lâu nhất là Mobile (Android & iOS). Mình là người thích chia sẻ kiến thức, những gì mình biết đều muốn chia sẻ ra. Blog này cũng là nơi mình chia sẻ các kiến thức và công nghệ mình đã làm trong các dự án. Blog mình hướng tới là chia sẻ kiến thức kết hợp với trải nghiệm thực tế khi làm ở doanh nghiệp.