Xin chào, và chào mừng trở lại.
Trong bài giảng này, tôi muốn nói về công cụ sửa đổi const và cách
chúng ta sử dụng nó với con trỏ.
Chúng tôi đã học về các bài giảng liên tục trước đó.
Nó chỉ có nghĩa là bạn không thể thay đổi giá trị của một biến. Nhưng nó có ý nghĩa gì khi chúng ta áp dụng nó vào một con trỏ?
Vì vậy, khi chúng ta sử dụng công cụ sửa đổi const trong một biến
hoặc một mảng, nó sẽ cho trình biên dịch biết rằng nội dung của mảng biến sẽ không bị thay đổi bởi chương trình.
Giải pháp thay thế là tạo các câu lệnh xác định bởi bộ tiền xử lý,
nhưng const thường là cách tốt hơn hiệu quả hơn để làm điều đó.
Với con trỏ, chúng ta phải cân nhắc hai điều khi sử dụng công cụ sửa đổi const.
Có phải chúng ta đang thực sự nói rằng con trỏ không thể thay đổi được không?
Hay chúng ta đang nói giá trị mà con trỏ trỏ đến không thể thay đổi?
Bởi vì hãy nhớ một con trỏ chứa một giá trị của một địa chỉ.
Và chúng tôi có thể không muốn thay đổi địa chỉ đó bao giờ.
Hoặc chúng tôi có thể không muốn thay đổi giá trị mà điểm đang trỏ đến.
Trong cả hai trường hợp, chúng ta phải cụ thể trong cú pháp của mình.
Vì vậy, bạn có thể sử dụng từ khóa const khi bạn khai báo một con trỏ để chỉ ra rằng giá trị
được trỏ đến không được thay đổi.
Cách mà bạn cung cấp điều này và một lần nữa để
con trỏ là một giá trị vì một giá trị có một địa chỉ.
Những gì nó trỏ đến là giá trị của địa chỉ đó.
Nếu bạn muốn điều đó không thay đổi, bạn sẽ
làm như thế này.
Bạn sẽ nói khi bạn khai báo con trỏ, bạn sẽ đặt dấu hoa thị
trong công cụ sửa đổi hằng số trước kiểu.
Vì vậy, bạn sẽ nói không đổi cho dù loại con trỏ của bạn là con trỏ dấu hoa thị.
Vì vậy, điều này thực sự bị biến dạng khi xác định một con
trỏ đến một hằng số.
Chúng tôi sẽ không thể thay đổi 999l.
Vì vậy, chúng tôi tuyên bố rằng giá trị được trỏ tới bởi pvalue là không đổi.
Trình biên dịch sẽ kiểm tra bất kỳ câu lệnh nào cố gắng sửa đổi giá trị được trỏ tới bởi pvalue.
Và nếu có bất kỳ người bạn nào làm như vậy trong chương trình, nó sẽ gây ra lỗi.
Vì vậy, đây là cú pháp. Một lần nữa những gì bạn
muốn lưu ý ở đây là const là từ
đầu tiên và nó đứng trước kiểu. Vì vậy, điều đó nói rằng giá trị trỏ đến
không thể thay đổi.
Vì vậy, nếu bạn cố gắng làm điều gì đó như thế này trên pvalue, bạn
thử gán một giá trị cho những gì đang trỏ đến vì bạn thấy
toán tử điều hướng ở đó. Điều đó có nghĩa là chúng tôi đang gán một
giá trị cho những gì chúng tôi đang trỏ đến. Nếu chúng tôi cố gắng
làm điều đó, nó sẽ báo lỗi vì chúng tôi không thể
thay đổi giá trị đó, không thể đổi 999l thành 888l.
Vì vậy, bây giờ những gì về con trỏ đến hằng số.
Và trong phần khai báo trước, chúng
ta đã tạo con trỏ mà con trỏ đến không thể thay đổi.
Nhưng chúng ta vẫn có thể thay đổi giá trị thực của biến mà chúng ta đã khai báo.
Vì vậy, chúng tôi vẫn có thể thay đổi giá trị dài.
Chúng tôi không thể thay đổi giá trị p của sao.
Nhưng giá trị dài không được định nghĩa là một hằng số mà nó chỉ được định nghĩa là giá trị dài.
Vì vậy, chúng tôi vẫn có thể sửa đổi con trỏ số nguyên
giá trị vì nó không được áp dụng hằng số.
Chúng tôi chỉ áp dụng hằng số cho con trỏ. Vì vậy, chúng ta có thể nói giá trị bằng 777l.
Giá trị được trỏ đến đã thay đổi, nhưng bạn không sử dụng con trỏ để thực hiện thay đổi.
Bản thân con trỏ cũng không phải là một hằng số.
Con trỏ nhớ chứa một địa chỉ.
Chúng tôi đã không khai báo con trỏ là một hằng số. Vì vậy, chúng tôi vẫn có thể thay
Chúng tôi những gì con trỏ trỏ đến là không đổi. đổi điều đó. Nếu chúng ta khai báo một biến mới có tên là number, chúng
ta có thể nói p-value bằng địa chỉ của số đó.
Điều đó hoàn toàn ổn vì chúng tôi đang thay đổi địa chỉ của giá trị của con trỏ.
Chúng tôi không thay đổi giá trị của những gì con trỏ trỏ đến.
Vì vậy, hãy hiểu sự phân biệt này, hoặc thay đổi
giá trị của con trỏ, đó
chỉ là một địa chỉ hoặc thay đổi những gì con trỏ đang trỏ đến.
Nếu bạn không muốn thay đổi những gì con
trỏ đang trỏ đến, const phải là từ khóa đầu tiên trong khai báo của chính con trỏ.
Vì vậy, một lần nữa, trong ví dụ này, chúng ta sẽ thay đổi địa chỉ được lưu trữ trong giá trị p để trỏ đến một số.
Chúng ta vẫn không thể sử dụng con trỏ để thay đổi giá trị được lưu trữ vì nó đã được
khai báo là chúng ta không thể thay đổi giá trị đó.
Bạn có thể thay đổi địa chỉ được lưu trữ trong con trỏ tùy thích, giống như chúng tôi đã làm.
Không được phép sử dụng con trỏ để thay đổi giá trị được trỏ tới
ngay cả khi bạn đã thay đổi địa chỉ được lưu trữ trong con trỏ.
Vì vậy, mặc dù chúng tôi vừa thay
đổi nó thành số dài, con trỏ vẫn không đổi làm từ khóa.
Vì vậy, chúng ta không thể thay đổi giá trị bất kể con trỏ đang trỏ đến.
Điều gì về việc không cho phép địa chỉ của con
trỏ thay đổi, giá trị nằm trong con trỏ.
Vì vậy, bạn cũng có thể muốn đảm bảo rằng địa chỉ được lưu trữ trong con trỏ không thể thay đổi.
Bạn có thể thực hiện việc này bằng cách sử dụng từ khóa
hằng trong khai báo con trỏ theo cùng một cách, nhưng nó hơi khác một chút.
Thay vì có const làm từ khóa đầu tiên,
bạn đặt nó sau kiểu dữ liệu và sau dấu hoa thị.
Điều này nói rằng bản thân con trỏ không thể thay đổi giá trị của nó.
Nếu bạn đặt nó trước int, bạn đang nói rằng giá trị mà con trỏ trỏ đến không thể thay đổi.
Vì vậy, khi bạn làm điều này, nó đảm bảo rằng con trỏ luôn trỏ đến cùng một thứ.
Địa chỉ sẽ không bao giờ thay đổi.
Trình biên dịch sẽ kiểm tra rằng
bạn không đảo ngược cố gắng thay đổi con trỏ ở nơi khác trong mã của bạn.
Bạn không thể thay đổi địa chỉ này.
Vì vậy, nếu bạn cố gắng nói số p bằng và mục, bạn sẽ gặp lỗi.
Bởi vì điều đó chỉ có thể trỏ đến địa chỉ đếm.
Tất cả là về nơi bạn đặt từ khóa không đổi nếu bạn muốn thay đổi.
Nếu bạn không muốn cho phép con trỏ đến con trỏ thay đổi hoặc nếu
bạn không cho phép địa chỉ của con trỏ thay đổi.
Không đổi vì từ khóa đầu tiên không cho phép thay đổi giá trị của các con trỏ trỏ đến.
Nếu bạn đặt hằng số sau kiểu dữ liệu trong dấu sao, điều đó nói
rằng địa chỉ con trỏ không thể thay đổi.
Vì vậy, đó là rất nhiều để mất và điều đó rất khó hiểu, vì vậy hãy nghiên cứu những gì tôi vừa nói.
Hiểu cú pháp đó, nó rất quan trọng và
nó rất phức tạp. Nó có thể rất dễ dàng mắc phải
sai lầm đó. Vì vậy, hãy hiểu sự khác biệt.
Bạn vẫn có thể thay đổi giá trị
mà số đếm p trỏ đến bằng cách sử dụng số đếm p, giống như chúng ta có thể làm trong phần trước. Bởi vì số đếm p là, mặc dù chúng ta gán, chúng ta
không thể gán một địa chỉ mới, chúng ta
vẫn có thể thay đổi giá trị được trỏ tới.
Vì vậy, chúng tôi có thể hủy tham chiếu nó và thay đổi nó theo cách đó. Chúng ta có thể nói số sao p bằng 345, điều đó tốt.
Tham chiếu giá trị được lưu trong bộ đếm thông qua con trỏ và thay đổi giá trị thành 345.
Bạn có thể tạo một con trỏ hằng trỏ đến một giá trị cũng là một
hằng số, vì vậy bạn có thể làm như thế này, hằng số trong mục
dấu sao, hằng số p.
Và điều đó nói lên rằng giá trị đang trỏ tới là
không đổi và bản thân con trỏ là một hằng số.
Vì vậy, mục p là một con trỏ hằng đến một hằng số nên mọi thứ đều cố định.
Bạn không thể thay đổi địa chỉ được lưu trữ trong mục p và bạn không thể
sử dụng mục p để sửa đổi những gì nó trỏ tới.
Tuy nhiên, bạn vẫn có thể thay đổi mục này.
Mục không phải là một hằng số, vì vậy bạn có thể thay đổi mục.
Bạn có thể thay đổi giá trị trực tiếp.
Nếu bạn muốn chắc chắn rằng không có gì bị thay đổi,
bạn cũng phải tạo biến int item dưới dạng một hằng số.
Và điều đó có thể nói rằng nó sẽ không bao giờ thay đổi.
Nhưng hãy nhớ sự khác biệt ở đây giữa
con trỏ hằng và các giá trị không đổi mà con trỏ đang trỏ tới.
Bạn có thể sử dụng cả hai. Bạn có thể sử dụng cái này hoặc cái kia.
Nếu bạn muốn đảm bảo rằng
mọi thứ đều không đổi, hãy đảm bảo những gì bạn đang trỏ đến biến đó, biến đó cũng không đổi. Cảm ơn bạn.