Rate this post

Con trỏ là một biến lưu trữ địa chỉ của một biến khác. Dạng chung của khai báo biến con trỏ là: var tên-biến *kiểu-dữ-liệu

Một con trỏ mới được khai báo chưa được gán cho một biến có giá trị nil.

Kiểu * T là một con trỏ đến giá trị T. Giá trị 0 của nó là nil.

var p * int

Toán tử & tạo ra một con trỏ tới toán hạng của nó.

i: = 42
p = & i

Toán tử * biểu thị giá trị cơ bản của con trỏ.

fmt.Println (* p) // đọc i thông qua con trỏ p
* p = 21 // đặt i qua con trỏ p

Toán tử address-of &, khi được đặt trước một biến sẽ cho chúng ta địa chỉ bộ nhớ của biến đó.

Các bài viết liên quan:

Với con trỏ, chúng ta có thể truyền một tham chiếu đến một biến (ví dụ: dưới dạng tham số cho một hàm), thay vì truyền một bản sao của biến có thể giảm mức sử dụng bộ nhớ và tăng hiệu quả.

Ví dụ:

Kết quả:

Toán tử * và &

Trong Go, một con trỏ được biểu diễn bằng ký tự * (dấu hoa thị) theo sau là loại giá trị được lưu trữ. Trong hàm zero, xPtr là một con trỏ đến một int.

* cũng được sử dụng cho các biến con trỏ “bỏ tham chiếu”. Tham chiếu đến một con trỏ cho phép chúng ta truy cập vào giá trị mà con trỏ trỏ tới.

Khi chúng ta viết * xPtr = 0, chúng ta đang nói “lưu trữ số int 0 ở vị trí bộ nhớ mà xPtr tham chiếu đến”. Nếu chúng ta thử xPtr = 0 thay vào đó, chúng ta sẽ gặp lỗi trình biên dịch vì xPtr không phải là int mà là * int, chỉ có thể được cung cấp một * int khác.

Cuối cùng, chúng tôi sử dụng toán tử & để tìm địa chỉ của một biến. & x trả về một * int (con trỏ tới một int) vì x là một int. Đây là những gì cho phép chúng tôi sửa đổi biến ban đầu. & x trong main và xPtr bằng 0 tham chiếu đến cùng một vị trí bộ nhớ.

Xem thêm Cách thực thi file jar trong Java

New

Một cách khác để lấy con trỏ là sử dụng hàm new được tích hợp sẵn:

func one(xPtr *int) {
  *xPtr = 1
}
func main() {
  xPtr := new(int)
  one(xPtr)
  fmt.Println(*xPtr) // x is 1
}

new nhận một kiểu làm đối số, cấp phát đủ bộ nhớ để phù hợp với một giá trị của kiểu đó và trả về một con trỏ cho nó.

Trong một số ngôn ngữ lập trình, có sự khác biệt đáng kể giữa việc sử dụng new và &, cần hết sức cẩn thận để cuối cùng xóa bất kỳ thứ gì được tạo bằng new. Go không giống như thế này, nó là một ngôn ngữ lập trình được thu gom rác, có nghĩa là bộ nhớ sẽ tự động được dọn dẹp khi không có gì liên quan đến nó nữa.

Xem thêm Number trong Python

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now