Con trỏ trong C là gì? Giới thiệu khái niệm và nội dung cơ bản
Con trỏ trong C là một khái niệm rất quen thuộc đối với các nhà lập trình viên. Tuy cơ bản nhưng lĩnh vực kiến thức mà con trỏ trong C++ liên quan là rất rộng. Người dùng cần nắm vững những thông tin quan trọng này để có thể sử dụng một cách nhuần nhuyễn con trỏ C. Bài viết sau sẽ đề cập đến khái niệm của con trỏ C, cách sử dụng và biểu diễn nó trong ngôn ngữ lập trình như thế nào. Hãy theo dõi ngay!
Tìm hiểu địa chỉ ô nhớ trong C
Trước khi tìm hiểu khái niệm con trỏ trong C, ta sẽ điểm qua một vài thông tin của địa chỉ biến nhớ trước. Đầu tiên ta sẽ nhìn qua ví dụ sau:
int number;
printf(“\nNhap number = “);
scanf(“%d”, &number);
printf(“\nnumber = %d”, number);
Bạn có thể thấy rằng khi dùng hàm scanf, để truyền biến number ta cần dùng dấu &. Còn đối với hàm printf thì lại không cần. Lý do ở đây là gì? Câu trả lời là vì scanf cần giá trị của biến, vì thế dấu & sẽ giúp nó định vị được địa chỉ của biến đó.
Từ đó ta rút ra được kết luận: Mỗi biến đều được đính kèm địa chỉ của nó và giá trị nó đang lưu trữ. Để xác định được địa chỉ của biến, ta chỉ cần thêm dấu & đằng trước nó.\
>>> Xem thêm : Nguyên lý SOLID là gì? Cách giải trình SOLID đơn giản nhất
Ví dụ thực hành: Khi chạy đoạn mã sau:
#include <stdio.h>
int main()
{
int number = 5;
printf(“Gia tri cua number = %d”, number);
// truy xuất địa chỉ bằng cách thêm & trước tên biến
printf(“\nDia chi cua number = %d”, &number);
return 0;
}
Thì ta sẽ nhận được kết quả trả về là:
Gia tri cua number = 5
Dia chi cua number = 6487580
Chú ý rằng kết quả ở mỗi máy có thể khác nhau do thông số không giống nhau. Nếu bạn muốn nhận địa chỉ là hexa như đầu bài, hãy thay thế %d bằng %x.
Con trỏ trong C là gì?
Quay trở lại với khái niệm của con trỏ trong C. Con trỏ C cũng là một dạng biến có địa chỉ và giá trị đi kèm. Nhưng pointer (con trỏ C) là một biến đặc biệt, nó không lưu trữ những giá trị thông thường. Biến của con trỏ sẽ trỏ đến một địa chỉ của biến khác. Chính vì thế giá trị của nó ở trong dạng một địa chỉ.
Vậy là trong con trỏ C sẽ lưu trữ 2 địa chỉ khác nhau: địa chỉ của con trỏ là vị trí của nó nhưng giá trị của nó lại là địa chỉ của biến mà nó đang trỏ tới. Ngoài ra, nhờ khả năng lưu trữ địa chỉ đặc biệt của con trỏ C, nó cho phép người dùng trỏ đến một điểm bất kỳ trong bộ nhớ. Nếu nắm chắc cách sử dụng pointer, bạn sẽ cảm thấy đây là một điểm mạnh tuyệt vời của nó. Nhưng nếu ngược lại, vì tình trạng trỏ lung tung của pointer, người dùng không thể xử lý sẽ cho đây là một điểm yếu phiền phức.
>>>Mời bạn tham khảo thêm: Các loại tính cách MBTI là gì – Con bạn thuộc nhóm nào?
Những nội dung liên quan đến con trỏ C++
Cách khai báo con trỏ
Cách khai báo con trỏ C cũng giống như các biến bình thường khác, bao gồm kiểu dữ liệu và tên biến được ngăn cách ở giữa bới dấu *. Điều kiện là định danh tên biến phải hợp lệ. Cú pháp mẫu khi khai báo con trỏ như sau:
<kiểu dữ liệu> * <tên biến>
hoặc
<kiểu dữ liệu>* <tên biến>
hay
<kiểu dữ liệu> *<tên biến>
Cả 3 kiểu khai báo như thế này đều đúng.
Có nhiều kiểu dữ liệu khác nhau, có thể là void, int, float hay double… đều được. Tác dụng của dấu * là cho trình biên dịch biết đằng sau nó là một biến được khai báo dạng con trỏ. Dưới đây là một số ví dụ về cú pháp cụ thể của các loại khai báo trỏ biến khác nhau:
- Trường hợp khai báo con trỏ để trỏ tới biến kiểu nguyên: int *p_i;
- Trường hợp khai báo con trỏ C++ kiểu int, biến val (không phải con trỏ) cũng kiểu int: int *p, val;
- Trường hợp khai báo con trỏ để trỏ tới biến kiểu thực: float *p_f;
- Trường hợp khai báo con trỏ để trỏ tới biến kiểu ký tự: char *p_char;
- Trường hợp khai báo con trỏ kiểu void (không kiểu): void *p_v;
>>> Xem thêm : Webhook là gì? Những lưu ý khi sử dụng Webhook cho người mới
Gán địa chỉ vào con trỏ trong C
Bạn chỉ nên gán địa chỉ cho con trỏ sau khi đã khai báo nó thành công. Nếu chưa khai báo mà bạn đã gán giá trị thì con trỏ đó sẽ tương đương như một biến rác, có thể làm lỗi hệ thống khi khởi chạy. Phiền phức hơn, nếu con trỏ đó bị trỏ đến một biến quan trọng, nó sẽ làm đảo lộn toàn bộ phần mềm của bạn.
Có 2 trường hợp để bạn gán địa chỉ cho con trỏ trong C:
- Gán địa chỉ sau khi đã khai báo: Trong ví dụ dưới đây, giá trị được gán cho p là địa chỉ của value.
int *p, value;
value = 5;
p = &value;
- Khai báo và gán địa chỉ đồng thời: Trong ví dụ dưới, hoạt động khai báo và gán giá trị cho p là địa chỉ của value được thực hiện cùng lúc.
int value = 5;
int *p = &value;
Lưu ý rằng hoạt động khởi tạo và gán địa chỉ nên được thực hiện cùng nhau. Nếu con trỏ bạn định khởi tạo là dạng void, nó có thể được trỏ tới bất kỳ địa chỉ của bất kỳ biến hay kiểu dữ liệu nào. Nếu bạn đã khai báo con trỏ rồi nhưng vẫn chưa biết gắn vào địa chỉ nào thì hay trỏ nó đến NULL bằng cú pháp int *p = NULL. Khi đó con trỏ sẽ vô hại với giá trị bằng 0.
Mối quan hệ giữa con trỏ và mảng động trong C++
Biến con trỏ và mảng động trong C++ có một mối liên hệ rất lớn. Trước hết ta sẽ đi nhanh về những định nghĩa cơ bản. Biến động còn được gọi là biến cấp phát động. Nó được hiểu như một kiểu dữ liệu dùng để định nghĩa. Nó không có tên mà cũng không được khai báo trong vùng biến. Biến động không được liên kết với bất kỳ biến nào. Để quản lý nó, người ta sẽ dùng con trỏ trong C++.
>>> Xem thêm : Gitignore File là gì? Đặc điểm và cách thức sử dụng ra sao?
Vì biến động không có tên hay phần khai báo nên con trỏ sẽ quản lý các biến cấp phát động trong C++. Khi đó ta gọi nó là biến con trỏ. Để bắt đầu cấp phát vùng nhớ cho một vùng nhớ, ta sẽ thực hiện như sau:
new <kiểu_dữ_liệu>;
Ví dụ thực tế:
new int;
new float;
Khi cấp phát thành công, con trỏ sẽ tự động trỏ đến biến động. Vì biến động không có địa chỉ, ta phải gắn địa chỉ của nó lên con trỏ như sau:
int *ptr = new int;
Lúc này, con trỏ đã được trỏ tới biến động kiểu int.
Ngoài ra, bạn cũng có thể khai báo là khởi tạo giá trị cùng lúc như sau:
int *ptr1 = new int(2409);
Nếu muốn xóa vùng nhớ của biến động, ta sẽ dùng toán tử delete. Cú pháp mẫu như sau:
delete <tên_biến_con_trỏ>;
Ví dụ thực tế: delete ptr_a;
>>>Mời bạn tham khảo thêm: Kỹ sư cầu nối là gì? Tìm hiểu và giải đáp về Brse?
Kết luận
Qua bài viết trên, hẳn là bạn đọc đã biết thêm được rất nhiều thông tin hữu ích xoay xung quanh chủ đề về con trỏ trong C. Nhìn chung, con trỏ trong C có liên quan mật thiết đến rất nhiều lĩnh vực khác nhau tại cấp phát động trong C. Vì thế để thao tác thành thạo với ngôn ngữ lập trình C++, con trỏ là phần bạn phải hiểu rõ. Những khái niệm như địa chỉ ô nhớ hay cách khai báo, cách gán biến nhớ chỉ là những kiến thức cơ bản và đơn giản nhất. Phạm vi kiến thức mà con trỏ C mang đến còn rất nhiều, đòi khỏi người học phải biết tự tìm tòi và rèn luyện chăm chỉ.
Mời bạn đọc tham khảo thêm: Hadoop là gì?
Tuy nhiên bạn đừng nản chí bởi con trỏ C là phần không quá khó nếu được luyện tập nhiều lần. Đây cũng là phần mà bất kỳ lập trình viên nào cũng cần thông thạo. Vì thế bên cạnh những kiến thức mà Teky cung cấp, hãy chịu khó tìm đọc thêm nhiều tài liệu nâng cao hơn về con trỏ C nhé. Rất nhiều thông tin hữu ích được biên soạn lại bằng tiếng Việt, vì thế bạn cũng không cần lo lắng không tìm được tài liệu dễ hiểu. Chúc bạn đọc nhanh chóng làm chủ được phần kiến thức xung quanh con trỏ C++.
Thông tin cơ bản về Học viện chuyên đào tạo công nghệ và lập trình – Teky
TEKY là Học viện sáng tạo công nghệ với chương trình giảng dạy STEAM (Science – Technology – Engineering – Art – Mathematics) theo chuẩn Mỹ đầu tiên tại Việt Nam dành cho trẻ em từ 4 đến 18 tuổi.
Được thành lập vào tháng 6 năm 2016, TEKY quyết tâm thực hiện sứ mệnh mang đến cho thế hệ trẻ Việt Nam kiến thức toàn diện về STEAM, đặc biệt là các tư duy công nghệ, khoa học máy tính và kỹ năng thế kỷ 21 – 4Cs (Critical Thinking: Tư duy phản biện – Communication: Giao tiếp – Creativity: Sáng tạo – Collaboration: Làm việc nhóm).
Đây là chương trình không chỉ trang bị kiến thức lập trình mà còn rèn luyện nhóm kỹ năng 4Cs. Trẻ sẽ được:
- Học tư duy phản biện thông qua việc phân tích các vấn đề.
- Học tính sáng tạo tư duy Logic thông qua việc lắp đặt và lập trình robot th ông qua các mô hình Lego Mindstorm, app trò chơi. Giúp con học giỏi môn Toán trên lớp
- Kỹ năng hợp tác thông qua các trò chơi team-building, các dự án nhóm trên lớp.
- Phát huy khả năng giao tiếp hiệu quả bằng nhiều bài tập và hoạt động hấp dẫn.
Các bộ môn giảng dạy tại Teky gồm: Lập trình và phát triển ứng dụng, lập trình game, lập trình web với python Lập trình Scratch Robotics Engineering, Công nghệ 3D và MultiMedia. Chúng tôi tin rằng trẻ em Việt Nam có cơ hội phát triển mạnh mẽ trong một nền kinh tế số và cần được trang bị sẵn sàng để trở thành những doanh nhân công nghệ trong tương lai.
Liên hệ ngay học viện công nghệ sáng tạo TEKY để được tư vấn khóa học:
- Cam kêt 7 tuổi có thể lập trình
- Top 10 dự án giáo dục có tầm ảnh hưởng nhất Đông Nam Á 2017 & 2018
- Top 3 Dự án xuất sắc nhất, NextGen – Thụy Sĩ
- Hotline Hà Nội: 024-7109-6668 | 0975-241-015
- Hotline Hồ Chí Minh: 028-7109 9948 | 097-900-8642
Website https://teky.edu.vn | Email: support@teky.edu.vn
Xem thêm: