Loại con trỏ này trong c ++
Bạn đã học từ chương trước rằng chúng ta có thể lấy địa chỉ bộ nhớ của một biến bằng toán tử tham chiếu Show
Thí dụint myAge = 43; printf("%d", myAge); Trong ví dụ trên, Con trỏ là một biến lưu trữ địa chỉ bộ nhớ của một biến khác làm giá trị của nó Một biến con trỏ trỏ đến một kiểu dữ liệu (như Thí dụ// Xuất giá trị của myAge (43) // Xuất địa chỉ bộ nhớ của myAge (0x7ffe5367e044) // Xuất địa chỉ bộ nhớ của myAge bằng con trỏ (0x7ffe5367e044) Ví dụ giải thíchTạo một biến con trỏ có tên Sử dụng toán tử Bây giờ, quy địnhTrong ví dụ trên, chúng ta đã sử dụng biến con trỏ để lấy địa chỉ bộ nhớ của một biến (được sử dụng cùng với toán tử tham chiếu Tuy nhiên, bạn cũng có thể lấy giá trị của biến mà con trỏ trỏ tới, bằng cách sử dụng toán tử Thí dụint myAge = 43; //Tham khảo. Xuất địa chỉ bộ nhớ của myAge bằng con trỏ (0x7ffe5367e044) // Dereference. Xuất giá trị của myAge bằng con trỏ (43) Lưu ý rằng dấu hiệu
tốt để biết. Có 3 cách khai báo biến con trỏ nhưng cách thứ nhất được sử dụng nhiều nhất int* myNum; Tại sao tôi nên tìm hiểu về con trỏ? Con trỏ là một trong những điều khiến C nổi bật so với các ngôn ngữ lập trình khác, như Python và Java Chương này chỉ là một phần giới thiệu ngắn về Con trỏ. Chúng rất quan trọng trong C, vì chúng cung cấp cho bạn khả năng thao tác dữ liệu trong bộ nhớ của máy tính - điều này có thể làm giảm mã và cải thiện hiệu suất. Tuy nhiên, con trỏ phải được xử lý cẩn thận vì có thể làm hỏng dữ liệu được lưu trữ trong các địa chỉ bộ nhớ khác Con trỏ trong C rất dễ học một số tác vụ trong ngôn ngữ C được thực hiện bằng cách sử dụng con trỏ. Và một số tác vụ như cấp phát bộ nhớ động chỉ được thực hiện bằng cách sử dụng con trỏ. Vì vậy, nó là điều cần thiết để tìm hiểu con trỏ. POINTER là biến lưu địa chỉ của biến kia. Một con trỏ cũng được dùng để chỉ một hàm con trỏ. Và con trỏ có thể được tăng hoặc giảm, nghĩa là nếu con trỏ được tăng lên thì nó trỏ đến vị trí tiếp theo và nếu con trỏ bị giảm thì nó trỏ đến vị trí bộ nhớ trước đó. Mục tiêu của con trỏ là tiết kiệm không gian bộ nhớ và thực hiện nhanh hơn. Và kích thước của con trỏ trong C là 8 byte nhưng trên máy 32 bit, chúng chiếm tới 4 byte Con trỏ hoạt động như thế nào?
số nguyên Y= 1; Y bây giờ bằng một
"&Y"
Thí dụ #bao gồm int chính () { intY=1; printf(“%d”, &Y); trả về 0; } đầu ra. 123756948 và nếu bạn chạy cùng một mã lần thứ hai, đầu ra có thể khác Nói một cách đơn giản, giá trị lưu trữ biến và con trỏ lưu trữ địa chỉ của biến Khai báo con trỏGiống như biến, con trỏ cần được khai báo trước khi sử dụng nó trong chương trình. Chúng ta có thể đặt tên cho con trỏ bất cứ thứ gì miễn là chúng tuân theo quy tắc đặt tên của C cú pháp. Kiểu_dữ_liệu *tên_biến_con_trỏ; Thí dụ. int*a; Khởi tạo một con trỏSau khi khai báo con trỏ, chúng ta phải khởi tạo con trỏ với địa chỉ biến chuẩn Nếu con trỏ không được khởi tạo thì có thể có vấn đề ở đầu ra cú pháp. con trỏ = biến; Thí dụ. p= &a; Con trỏ rỗngMột con trỏ trỏ đến không có gì được gọi là con trỏ Null. Một số ưu điểm của con trỏ Null là
ví dụ 1 int * aInt = NULL; ví dụ 2 vui vẻ int (int * ptr) { trả lại 15; } vui vẻ(NULL); ví dụ 3 tôi xỉu. = KHÔNG) { //một số mã} khác {//một số mã} Con trỏ trốngCon trỏ void trong C là con trỏ không liên kết với bất kỳ kiểu dữ liệu nào. Điều này trỏ đến một số vị trí dữ liệu trong bộ lưu trữ có nghĩa là trỏ đến địa chỉ đó của các biến. Nó còn được gọi là con trỏ đa năng. Trong C, hàm malloc() và calloc() trả về void * hoặc con trỏ chung Thí dụ intx=10; char y= ‘a’; void *p= &x //con trỏ void chứa địa chỉ của int x p = &y //bỏ con trỏ giữ của char y Con trỏ hoang dãCon trỏ không được khởi tạo được gọi là con trỏ hoang dã. Con trỏ này có thể được khởi tạo thành giá trị rác không phải NULL, giá trị này có thể không phải là địa chỉ hợp lệ. Thí dụ int chính () { int *p; *p=10; } Hãy nhớ rằng nếu một con trỏ p trỏ đến bất kỳ biến đã biết nào, thì đó không phải là một con trỏ hoang dã. Trong chương trình dưới đây p là một con trỏ hoang dã cho đến khi nó trỏ tới x int chính () { int = *p; intx=20; p= &x // p bây giờ không phải là một con trỏ hoang dã } Con trỏ lủng lẳngMột con trỏ trỏ đến một vị trí bộ nhớ đã bị xóa được gọi là con trỏ lơ lửng. ví dụ 1 Phân bổ bộ nhớ #bao gồm #bao gồm int chính () { int *ptr = (int *)malloc(sizeof(int)); miễn phí (ptr); ptr = NULL; } ví dụ 2 gọi hàm #bao gồm int *vui vẻ() { int y= 15; trả lại &y } int chính () { int *p = func() tuôn ra (stdin) printf(“%d”, *p); trả về 0; } Con trỏ phức tạpTrước khi biết cách đọc các con trỏ phức tạp, trước tiên bạn nên biết tính kết hợp và mức độ ưu tiên tính liên kết. Các toán tử thứ tự có mức độ ưu tiên như nhau trong một biểu thức được sử dụng Quyền ưu tiên. Toán tử ưu tiên mô tả thứ tự mà C đọc các biểu thức Nhà điều hành Quyền ưu tiên liên kết (),[] 1 trái sang phải *,Số nhận dạng 2 Phải sang trái Loại dữ liệu 3 –
Thí dụ int (*p)(int (*)[3], int (*)void)) gần con trỏ
Thí dụ #bao gồm int chính () { inta=300; int gần * ptr; ptr= &a; printf(“%d”,sizeof ptr); trả về 0; } đầu ra. 3 con trỏ xa
Thí dụ. #bao gồm int chính () { inta=10; int xa *ptr; ptr=&a; print(“%d”, sizeof ptr); trả về 0; } con trỏ khổng lồ
Thí dụ #bao gồm int chính () { char khổng lồ *xa *a; printf(“%d%d%d”, sizeof(a), size(*a), sizeof(**a)); trả về 0; } đầu ra. 4 4 1 Con trỏ cấu trúc
Ưu điểm của con trỏ trong C
|