Tóm lại về con trỏ

Con trỏ không phải là duy nhất đối với cờ vây, nhưng cờ vây có một hương vị riêng của con trỏ, vì vậy, thật tốt để tìm hiểu lý do tại sao chúng là duy nhất, vì bạn sẽ sử dụng con trỏ trong mọi chương trình cờ vây.

Tại sao lại là con trỏ?

Mọi thứ trong cờ vây đều được chuyển theo giá trị, như trongCvà trong tất cả các ngôn ngữ giảm dần từ C.

Nếu bạn truyền một Int cho một hàm, biến đó sẽ được sao chép.

Nếu bạn chuyển một con trỏ, con trỏ sẽ được sao chép, nhưngkhông phảigiá trị mà nó trỏ tới.

Vì vậy, trong hầu hết các trường hợp, con trỏ được sử dụng để gọi các hàm và chuyển các tham số bằng tham chiếu.

Một ví dụ

Hãy lấy một biến đơn giảnx, được định nghĩa là một số nguyên có giá trị5:

x := 5

Bây giờ, địa chỉ bộ nhớ củaxcó thể đạt được với&x

Nếu bạn in&xvớifmt.Println, bạn sẽ thấy rằng nó giống như0xc42000e248: một địa chỉ bộ nhớ.

Bây giờ, chúng ta có thể gán giá trị này cho một biến và biến đó sẽ là một con trỏ tớix.

y := &x

Nếu chúng ta viết câu lệnh gán này

*y = 10

cácxgiá trị bây giờ sẽ là10.

Không có con trỏ số học

Con trỏ Go tương tự như con trỏ C và C ++, nhưng chúng an toàn hơn, vì bạn không thể thực hiện các thao tác như

var x *int;
x++;

trên một con trỏ, vì không thể thay đổi địa chỉ của một con trỏ. Không có đối ngẫu con trỏ / mảng.

Trả về con trỏ của các biến hàm cục bộ

Các biến hàm cục bộ được tham chiếu bởi con trỏ trả về sẽ vẫn khả dụng trong khi con trỏ khả dụng. Điều này sẽ đảm bảo rằng con trỏ luôn hướng đến những gì bạn nghĩ.

Con trỏ Nil

Giá trị 0 của một con trỏ lànil. Điều này có nghĩa là vẫn có thể sử dụng con trỏ nil, nhưng điều này gây ra ít vấn đề hơn so với các ngôn ngữ khác (C, Java, C ++) vì có ít kiểu được che dưới dạng con trỏ và ít nil khác nằm xung quanh. Ví dụ, chuỗi trong C là con trỏ. Trong cờ vây, chúng là một loại.

nilkhông phải là trả về phổ biến cho các hàm, giống như trong các ngôn ngữ giá trị trả về đơn lẻ - kiểm tra lỗi được tổ chức hơn vànilkhông phải là giá trị 0 chung. Nhiều kiểu dữ liệu dựng sẵn (chuỗi, mảng, bản đồ, lát cắt ..) có giá trị 0 khác vớinil.

Người giới thiệu


Các hướng dẫn về go khác: