Trong bài bác này họ sẽ học các sử dụng nhỏ trỏ trong lập trình C. Đây là một kiến thức khá khó trong lập trình, yêu cầu chúng ta phải hiểu về bộ nhớ lưu trữ và địa chỉ trong c.

Bạn đang xem: Cách dùng con trỏ trong c

Bài 13 Trong học lập trình C từ bỏ A tới Z


Địa chỉ của biến

Mỗi biến khi khai báo sẽ được dành ra một hoặc các ô lưu giữ trong bộ nhớ, để truy vấn được ô lưu giữ này họ cần add của nó.

Điều này giống như như bạn đăng kí hộ khẩu vậy khi ấy Số XX Đường YY Quận ZZ bao gồm là add của đơn vị bạn.

Khi 1 bạn đến nhà của bạn người ta có 2 phương pháp để tìm

Địa chỉ với bất biến, tuy nhiên nó có thể cho Anh B, Anh C, Anh D thuê lại showroom đó. Cùng để truy cập địa chỉ cửa hàng của biến chúng ta sử dụng nhỏ trỏ.

Để xem địa chỉ của biến họ sử dụng toán tử &, ví dụ: address = &nha_anh_a;

VD: In ra add của biến

#include int main () int nha_anh_a; char nha_anh_b<25>; printf("Dia đưa ra cua nha anh A la: %x ", &nha_anh_a ); printf("Dia đưa ra cua nha anh B la: %x ", &nha_anh_b ); return 0;Kết quả

*

Con trỏ là gì?

Một con trỏ – pointer là một đổi thay mà trong các số ấy giá trị của nó là add của biến khác.

Thực chất nhỏ trỏ cũng là 1 trong biến. Nó cũng khá được cấp phân phát 1 ô nhớ nhằm lưu giá chỉ trị, nhưng lại điểm khác hoàn toàn là: giá trị của biến con trỏ là địa chỉ cửa hàng của biến hóa khác

Các bạn chỉ việc nhớ rõ điều này, sẽ không bị rối não khi học con trỏ.

Xem thêm: Cách Dùng Sữa Dưỡng Simple, Kem Dưỡng Ẩm Simple Có Tốt Không

*

Cách khai báo bé trỏ

Giống như các biến cùng hằng số, các bạn phải khai báo con trỏ trước khi chúng ta cũng có thể sử dụng nó để tàng trữ bất kì showroom của đổi thay nào. Dạng bao quát của việc khai báo bé trỏ như sau:

kiểu dữ liệu> * thương hiệu biến>;

VD: int *addr = &nha_anh_a; //khai báo trỏ tới địa chỉ của vươn lên là nhà anh A

Dấu * trước tên vươn lên là là ký kết hiệu báo đến trình biên dịch biết ta đang khai báo bé trỏ.

VD:


#include int main () int nha_anh_a; char nha_anh_b; int *address_A = &nha_anh_a; char *address_B = &nha_anh_b; printf("Dia chi cua nha anh A la: %x ", &nha_anh_a ); printf("Dia chi cua nha anh B la: %x ", &nha_anh_b ); printf("Gia tri cua nhỏ tro address_A la: %x ", address_A); printf("Gia tri cua con tro address_B la: %x ", address_B); printf("Dia chi cua nhỏ tro address_A la: %x ", &address_A); printf("Dia bỏ ra cua con tro address_B la: %x ", &address_B); return 0;Kết quả

*


Ta thấy rằng:
Địa chỉ bên anh A = Gia trị bé trỏ address_A. Tương xứng với lệnh khởi chế tạo int *address_A = &nha_anh_a;Địa chỉ của con trỏ address_A lại là một add khác phía trong ô nhớ. Thế nên ta có thể sử dụng 1 nhỏ trỏ khác nhằm trỏ về add của nhỏ trỏ address_A.

Cách áp dụng con trỏ

Thay đổi quý giá biến bằng con trỏ

Như chúng ta đã học, để đổi khác giá trị của biến họ sử dụng lệnh gán. VD: int var = 10;

Để chuyển đổi giá trị này còn có 2 cách:

Dùng lệnh gán: var = 20;Hoặc dùng con trỏ: *ptr = 20;

Dấu * t trong trường đúng theo này ý nghĩa sâu sắc đó là: Gán giá trị vào showroom mà nhỏ trỏ ptr sẽ trỏ tới.

Lưu ý: chúng ta phải khác nhau được dấu * trong trường hợp tạo ra con trỏ và dấu * vào trường đúng theo trỏ tới quý giá ô ghi nhớ (địa chỉ) mà bé trỏ đang giữ giàng nhé

*

Trong bài xích này, bọn họ sẽ nỗ lực đối quý hiếm Nhà anh A bằng con trỏ address_A nhé

#include int main () int nha_anh_a = 10; int *address_A = &nha_anh_a; printf("Dia đưa ra cua nha anh A la: %x ", &nha_anh_a ); printf("Gia tri cua nha anh A la: %d ", nha_anh_a ); printf("Gia tri cua nhỏ tro address_A la: %x ", address_A); *address_A = 20; printf(" "); printf("Dia bỏ ra cua nha anh A la: %x ", &nha_anh_a ); printf("Gia tri cua nha anh A la: %d ", nha_anh_a ); printf("Gia tri cua bé tro address_A la: %x ", address_A); return 0;Kết quả

*

Ta thấy rằng, khi dùng lệnh *address_A = 20; thì quý hiếm của biến chuyển nha_anh_a rứa đổi, còn quý hiếm của bé trỏ address_A không chũm đổi

Con trỏ của nhỏ trỏ hay nhỏ trỏ cấp 2

Khái niệm này nghe có vẻ như lằng nhằng tuy nhiên thực ra cũng rất đợn giản.Như phần trước đang nói, bé trỏ thực chất cũng là một biến, nó cũng có địa chỉ cửa hàng và giá chỉ trị. Vậy cho nên nó cũng sẽ có thể được call từ nhỏ trỏ khác. Như sau:

VD:

int main () int nha_anh_a = 10; int *address_A = &nha_anh_a; int **quan_ly = &address_A; printf("Dia bỏ ra cua nha anh A la: %x ", &nha_anh_a ); printf("Gia tri cua nha anh A la: %d ", nha_anh_a ); printf("Gia tri cua con tro address_A la: %x ", address_A); **quan_ly = 20; printf(" "); printf("Dia đưa ra cua nha anh A la: %x ", &nha_anh_a ); printf("Gia tri cua nha anh A la: %d ", nha_anh_a ); printf("Gia tri cua bé tro address_A la: %x ", address_A); return 0;Kết quả

*

Giải thích: Ta khai báo 1 nhỏ trỏ bậc 2 với dấu ** , giữ lại giá trị của biến con trỏ address_A.

Sau đó tiến hành biến đổi giá trị của trở thành mà con trỏ address_A trỏ cho tới một giải pháp gián tiếp bởi con trỏ cấp 2 quan_ly

*

Con trỏ NULL vào C

Có một cách thực hành xuất sắc khi bọn họ gán quý hiếm NULL mang đến biến con trở vào trường hợp bạn không có add chính xác để được gán. Điều này thường xẩy ra trong quy trình khai báo. Một bé trỏ được gán cực hiếm NULL được điện thoại tư vấn là bé trỏ null.

Con trỏ null là một hằng số với giá trị 0 được khái niệm trong một vài tủ sách chuẩn. Xem công tác dưới đây:

#include int main () int *contro = NULL; printf("Gia tri cua contro la: %x ", contro ); return 0;Biên dịch cùng chạy công tác C bên trên sẽ đến kết quả:

Gia tri cua contro la: 0

Kết

Con trỏ trong lập trình là một khái niệm nghe thì có vẻ phức tạp, tuy nhiên hãy suy nghĩ về nó một cách đơn giản và dễ dàng nhất. Bạn sẽ thấy nó cũng không rối não tựa như các gì chúng ta tưởng tượng.Và tất nhiên phải thao tác làm việc nhiều với con trỏ họ mới nắm rõ tường tận duy nhất về chúng

Nếu thấy bổ ích hãy phân chia sẻ bài viết và tham gia nhóm Nghiện Lập Trình để chia sẻ và học hỏi và chia sẻ nhé