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ề trường hợp sử dụng cho
con trỏ khi chúng ta sử dụng chúng như thế nào chúng ta sẽ sử dụng chúng. Chúng ta biết cách tạo chúng.
khai báo chúng và định nghĩa chúng.
Chúng ta biết cách gán địa chỉ của một biến hiện có cho chúng bằng cách sử dụng địa chỉ của toán tử.
Và chúng tôi biết cách hủy tham chiếu
chúng, cách lấy giá trị mà con trỏ đang trỏ tới.
Bây giờ chúng ta thực sự bắt đầu sử dụng chúng như thế nào.
Vì vậy, c cung cấp một số hoạt động cơ bản mà bạn có thể thực hiện trên con trỏ.
Bạn có thể gán một địa chỉ cho một con trỏ
mà chúng ta đã tìm hiểu về nó.
Đây là một biến hiện có trong đó biến có địa chỉ.
Và bạn chỉ cần nhìn vào địa chỉ của biến đó bằng cách sử dụng địa chỉ của toán tử, và
chúng ta có một điểm cho điều đó. Chúng tôi cũng có thể gán một con trỏ hiện có cho một con trỏ khác.
Đó là 2 cách bạn có thể gán địa chỉ cho một con trỏ.
Vì vậy, nó có thể là một tên mảng của chính nó.
Chúng ta chưa nói về mảng, nhưng khi bạn chỉ định tăng cho một con trỏ, tất
cả những gì bạn phải làm là chỉ định tên. Bạn thậm chí không cần phải sử dụng địa chỉ của nhà điều hành.
Cho đến nay, chúng tôi chỉ tập trung vào việc sử dụng một biến hiện
có và chuyển vào địa chỉ của chính biến đó.
Nhưng 3 cách bạn có thể làm được đề cập ở đó.
Bạn cũng có thể bỏ qua một con trỏ. Chúng tôi vừa mới biết rằng đó là nơi bạn sử dụng,
dấu hoa thị cho toán tử chuyển hướng.
Điều này sẽ cung cấp cho bạn giá trị được lưu trữ trong con trỏ tới. Con trỏ giá trị của con trỏ
là một địa chỉ mà điểm đang trỏ đến, chỉ
cần sử dụng nó. Bạn cũng có thể lấy một địa chỉ con trỏ.
Đây là địa chỉ thực của con trỏ khi bạn tạo
con trỏ nơi lưu trữ chính con trỏ.
Bạn cũng có thể sử dụng địa chỉ mà tôi có toán tử trên con trỏ đó.
Và bạn cũng có thể thực hiện số học con trỏ. Chúng ta sẽ có một bài giảng riêng về vấn đề này.
Đây là nơi bạn có thể sử dụng các toán
tử cộng và trừ để thêm số nguyên vào con trỏ hoặc trừ số nguyên khỏi con trỏ.
Và điều này cho phép bạn có ký hiệu cụ thể và cho
phép bạn di chuyển trong bộ nhớ nhanh hơn, đặc biệt nếu bạn đang sử dụng mảng.
Vì vậy, những gì bạn thường làm là khi bạn thêm một số nguyên
vào một con trỏ bằng cách
sử dụng toán tử cộng,
nó sẽ chỉ đặt địa chỉ của con trỏ đó lên rất nhiều byte.
Nếu bạn trừ
một số khỏi một con trỏ, nó sẽ
đặt địa chỉ đó trừ đi một số byte nhất định.
Bạn cũng có thể tăng giảm một và bạn
sẽ thấy điều này rất phổ biến khi chúng ta sử dụng nó trong các mảng.
Vì vậy, khi bạn đang ở trong một mảng và bạn muốn chuyển đến phần tử tiếp theo thay vì sử dụng chỉ mục, bạn có thể
sử dụng một con trỏ và chỉ cần tăng nó lên từng phần tử.
Nếu bạn muốn di chuyển đến phần tử trước đó thay vì sử dụng một chỉ mục, bạn
có thể giảm chỉ mục đó đi từng phần tử.
Vì vậy, số học con trỏ, chúng ta sẽ nói riêng về vấn đề này,
nhưng đó là điều bạn có thể làm với con trỏ.
Và một lần nữa, đó là ký hiệu đặc biệt cho phép bạn di chuyển
nhanh chóng trong bộ nhớ,
hiệu quả hơn.
Bạn cũng có thể tìm thấy sự khác biệt giữa 2 con trỏ.
Vì vậy, nếu bạn có 2 con trỏ và các phần tử nằm trong cùng một mảng, bạn có
thể muốn tìm hiểu xem chúng cách xa nhau như thế
nào, các phần tử, bạn có thể trừ chúng đi.
Đây sẽ là sự khác biệt
của 2 con trỏ và. Vì vậy, nếu bạn đang lập chỉ mục 5 và sau
đó bạn có một điểm con trỏ trong chỉ mục 5, bạn có một điểm trỏ khác trỏ đến chỉ
mục 15, bạn có thể trừ chúng đi và điều
đó sẽ cung cấp cho bạn
bao nhiêu phần tử mà chúng bị loại bỏ, bởi vì nó sẽ địa chỉ thập lục phân trừ
đi địa chỉ thập lục phân khác, giả sử mảng trong bộ nhớ
liên tục là của nó, nó sẽ hiển thị chúng cách xa nhau như thế nào.
Bạn có thể sử dụng toán tử quan hệ để so sánh giá trị của 2 con trỏ.
Các con trỏ phải cùng loại. Vì vậy, nếu cả hai đều trỏ số nguyên, thì
cả hai phải cùng loại.
Điều này sẽ chỉ cho bạn biết liệu các địa chỉ có lớn hơn hay nhỏ hơn hay không.
Một lần nữa, bạn có thể xác định bạn đang ở phần nào của mảng.
Ngoài ra còn có 2 hình thức trừ.
Vì vậy, tôi vừa nói về phép trừ trong
đó bạn thực sự có thể lấy một con trỏ và trừ nó cho một con trỏ khác
mà bạn sẽ nhận được
một con trỏ hoặc bạn có thể trừ một con trỏ khỏi một
số nguyên, điều này sẽ cung cấp cho bạn một con trỏ.
Vì vậy, hãy trừ một con trỏ này với một con trỏ khác để nhận được một số nguyên
hoặc trừ một số nguyên từ một con trỏ để nhận được một con trỏ. Đó là 2 trường hợp.
Vì vậy, chúng tôi sẽ ghi nhớ rằng chúng tôi sẽ đi qua một số ví dụ khác.
Hãy cẩn thận khi bạn sử dụng tăng hoặc giảm con trỏ và làm
cho mảng vượt ra ngoài giới hạn. Vì vậy, hầu hết những điều bạn làm với
số học con trỏ là khi bạn đang hoạt động trên các mảng.
Bởi vì một lần nữa, nó cho phép bạn di chuyển nhanh chóng, cú pháp đơn giản.
Nhưng hãy nhớ rằng, các mảng có lỗi nằm ngoài giới hạn.
Vì vậy, nếu bạn tăng quá xa, bạn sẽ đi
ra ngoài giới hạn trong mảng. Nếu bạn giảm quá xa, bạn sẽ có
một con số dưới giới hạn, bạn sẽ trở thành một con số âm.
Bản thân máy tính sẽ không theo dõi xem một con trỏ có còn trỏ đến một phần tử mảng hay không.
Vì vậy, sử dụng điểm số học trên mảng, bạn phải cẩn thận.
Nếu bạn muốn con trỏ được sử dụng trong biểu thức, bạn cũng có thể làm điều đó.
Vì vậy, chúng tôi đã nói về điều này sớm hơn một chút, và chúng tôi đã tham chiếu đến con trỏ và chúng tôi đã
thêm 15 vào nó. Tôi nghĩ chúng tôi có 20.
Vì vậy giá trị của con trỏ pi có thể được sử dụng trong các biểu thức số học.
Vì vậy, nếu một biến được xác định là kiểu con trỏ tới số nguyên, thì nó
được đánh giá bằng cách sử dụng các quy tắc số học số nguyên.
Và chúng tôi đã cho thấy điều đó với cuộc hội thảo. Vì vậy, nếu bạn có
một biến và bạn có một con trỏ, hãy khởi tạo nó thành null, sau đó bạn ký
vào con trỏ của mình địa chỉ của biến đó. Sau đó, bạn chỉ có thể nói pnumber sao cộng bằng 25.
Hãy nhớ rằng pnumber dấu sao đang nhận giá trị được trỏ đến.
Vì vậy, những gì điều này đang làm là nó nói giá trị của
pnumber bằng giá trị của pnumber cộng với 25.
Vì vậy, giá trị sẽ bằng 35.
Điều này không thay đổi những gì nó trỏ đến bởi vì chúng tôi đang sử dụng dấu hoa thị, vì vậy nó
không thay đổi địa chỉ mà chúng tôi đang trỏ đến,
nó không thay đổi chính địa chỉ vì chúng tôi không có địa chỉ của toán tử.
Chúng tôi đang thay đổi giá trị mà nó trỏ tới.
Vì vậy, khi tăng giá trị của biến số lên 25, ngôi sao cho biết rằng bạn
đang hỏi nội dung mà biến có tên là pnumber đang trỏ đến.
Nếu một con trỏ trỏ đến biến x, con trỏ
đó đã được xác định là một con trỏ đến cùng kiểu dữ liệu với x.
Vì vậy, nếu bạn tạo một con trỏ kết thúc là một con trỏ
float, bạn chỉ có thể có một
địa chỉ của kiểu dữ liệu là float hoặc int tùy thuộc vào kiểu dữ liệu bạn đã khai báo.
Vì vậy, việc sử dụng toán tử hướng trong một
biểu thức cũng giống như việc sử dụng x trong cùng một biểu thức.
Và đó là tất cả những gì người ta nói là nếu bạn sử dụng float hoặc bạn có int
và bạn sử dụng toán tử hướng dẫn, bạn tham khảo nó, bạn có thể làm bất
cứ điều gì bạn có thể nếu bạn có float trong đó, bất cứ điều gì nó trỏ đến.
Một biến được định nghĩa là một con trỏ tới một int có thể lưu trữ địa chỉ của bất
kỳ biến nào có kiểu trong đó, chúng tôi biết điều đó.
Vì vậy, ở đây giá trị int bằng 999, chúng ta có thể gán int đó cho pnumber miễn
là pnumber là một con trỏ tới một int, và sau đó chúng ta
có thể thêm vào nó.
Câu lệnh sẽ hoạt động với giá trị biến mới
và giá trị nội dung mới sẽ là 1024.
Pnumber đang trỏ đến giá trị, địa
chỉ của giá trị. Vì vậy, nếu bạn thay đổi con trỏ mà
nó đang trỏ tới giá trị, bạn sẽ thay đổi giá trị của giá trị biến này.
Vì vậy, chỉ cần nhớ rằng đây là khái niệm thay đổi một biến tại một vị
trí con trỏ và bạn đang thay đổi nó trong nhiều biến.
Một con trỏ có thể chứa địa chỉ của bất kỳ biến nào thuộc kiểu thích hợp.
Vì vậy, bạn có thể sử dụng một biến con trỏ để thay đổi giá trị của nhiều biến
khác nhau nếu có ints hoặc double hoặc float. Miễn là chúng là loại tương thích với loại con trỏ,
bạn có thể thay đổi giá trị đó. Bạn không thể thay đổi giá
trị pnumbers nếu pnumber trỏ đến một số thực và giá trị
là một số nguyên. Bạn sẽ không thể làm điều đó. Bạn sẽ có một lỗi biên dịch.
Một ví dụ khác ở đây. Sau đây chúng tôi sẽ chỉ
cho bạn cách lấy địa chỉ của một số biến. Vì vậy, ở đây trong chính này, chúng ta đang
thực hiện một số phép tính
con trỏ trên các biểu thức thực tế.
Vì vậy, chúng tôi không làm bất cứ điều gì trên mảng, vì vậy chúng tôi không tăng hoặc giảm các
con trỏ trong đó. Vì vậy, chúng tôi đang giảm giá trị. Như vậy chúng ta có 2
kiểu long là num1 và num2 và sau đó chúng ta có một con trỏ kiểu long, chúng ta khởi tạo nó thành null.
Chúng tôi gán địa chỉ của num1 cho con trỏ pnum của chúng tôi.
Và sau đó chúng tôi gán giá trị của pnum cho L,
điều đó có nghĩa là num1 bây giờ sẽ là 2l.
Nếu chúng ta tăng num2, bây giờ num2 vẫn chưa làm
gì cả.
Vì vậy giá trị của pnum là 2l, nghĩa là giá trị của num1 là 2l.
L chỉ là hậu tố để biểu thị rằng nó dài.
Nếu bây giờ chúng ta tăng giá trị num2 dài, nó
là 0l, nó sẽ là 1l.
Nếu chúng ta nói num2 plus bằng
star pnum, pnum là 2l, vì vậy nó sẽ là
1l cộng với 2l, num2 bây giờ sẽ bằng 3l.
Và sau đó nếu chúng ta gán địa chỉ của num2 cho pnum,
thì pnum bây giờ sẽ bằng địa chỉ của num2.
Vì vậy, nếu chúng ta tăng pnum những
gì chúng ta đang trỏ đến, bây giờ chúng ta sẽ có 4l.
Và chúng ta sẽ xem xét điều này bên trong những khối đá lạnh
lẽo, nhưng tôi đang hướng dẫn bạn qua nó. Num1 sẽ bằng 2l.
Num2 sẽ bằng với nó đang
trỏ tới pnum.
Pnum là 3l, vì vậy tôi nghĩ nó sẽ là 3l.
Pnum sẽ là 3l, và sau đó Pn cộng với num2
sẽ là 6l.
Vì vậy, hãy xem tôi có đúng không, hãy xem qua điều này trong các khối mã.
Vì vậy, ở đây chúng tôi đang ở trong các khối mã, đã cố gắng thực hiện điều này bằng tay, nhưng bây
giờ chúng tôi muốn xem liệu chúng tôi có đúng hay không. Hãy sử dụng trình gỡ lỗi.
Chúng tôi sẽ đặt điều này ngay tại đây và chúng tôi sẽ xem khi chúng tôi xem qua chương trình các giá trị đang thay đổi như thế nào.
Vì vậy, hãy xây dựng cái này, và hãy gỡ lỗi nó.
Điều này sẽ bắt đầu và nó sẽ dừng lại ở dòng 10.
Và nếu chúng tôi hiển thị cửa sổ đồng hồ của mình, mà
chúng tôi có thể thực hiện bằng cách gỡ lỗi trong đồng hồ cửa sổ, đồng hồ, chúng tôi có
thể thấy các giá trị khi chúng đang hoạt động. Vì vậy, ngay bây
giờ num1 là 0, num2 là 0, pnum đang trỏ đến null.
Đó là lý do tại sao nó là
0x0, bởi vì chúng ta biết rằng null đại diện cho 0 trong số pnumber.
Và chúng ta có thể sử dụng nó khi chúng ta so sánh nó trong câu lệnh if.
Vì vậy, sau khi chúng tôi thực hiện dòng 10, pnum bây giờ sẽ có địa chỉ là num1.
Vì vậy, chúng ta hãy chỉ bước qua.
Bây giờ pnum có địa chỉ thực là 0x60ff08.
Sau khi chúng tôi thực hiện dòng 11, chúng tôi sẽ nói giá trị của pnum bằng 2l và chúng tôi sẽ không thực sự nhìn thấy bất
kỳ thứ gì trong cửa sổ theo dõi cho điều đó. Nhưng chúng ta hãy tiếp tục và thực hiện nó,
pnum vẫn có cùng một địa chỉ.
Num1 bây giờ đã được thay đổi vì pnum có địa chỉ
là num1 và chúng tôi đã thay đổi nó.
Vì vậy, bây giờ num1 là 2. Bây giờ ở dòng 12, chúng ta sẽ tăng num2.
Vì vậy, num2 sẽ trở thành 1l.
Nó sẽ là 1. Địa chỉ của pnum vẫn vậy.
Bây giờ chúng ta sẽ thêm vào num2 bất cứ
thứ gì pnum là. Pnum hãy nhớ là
trỏ đến num1, vì vậy num2 phải là 3.
Sau đó, chúng ta đi đến 14, num2 là 3, num1 vẫn là 2.
Bây giờ ở dòng 15, chúng ta sẽ
gán cho pnum một địa chỉ mới là num2. Vì vậy, sau này,
chúng ta sẽ không còn là 0x60ff08 nữa.
Chúng ta sẽ là 060ff04.
Vì vậy, bây giờ nếu chúng ta tăng giá trị mà pnum đang trỏ đến là
số 2 và số 2 là 3, thì số 2 bây giờ sẽ là 4.
Và chúng tôi thấy đó là 4.
Bây giờ chúng ta sẽ in ra tất cả các giá trị này và bạn sẽ thấy giá trị của
num1 phải là 2.
Giá trị của num2 phải là 4.
Pnum đang trỏ tới num2, do đó, giá trị đó phải là 4.
Và sau đó chúng ta sẽ nói giá trị của pnum là 4
cộng, num2 là 4 nên là 8.
Vì vậy, tôi có thể đã thực sự nghỉ với 6.
Vì vậy, bây giờ chúng ta sẽ không thể thấy điều đó trong cửa sổ theo dõi. Vì vậy, chúng ta hãy chơi
nó và xem đầu ra là các câu lệnh printf. Chúng ta sẽ thấy 2448.
Vì vậy, hãy chạy điều này ngay bây giờ ở chế độ
không gỡ lỗi và chúng tôi thấy 2 4 4 8.
Vậy là xong. Tôi hy vọng rằng ý thức thực hiện.
Hãy quay lại và tiếp tục cuộc thảo luận của chúng ta.
Vậy còn khi chúng ta nhận được thông tin đầu vào, làm thế nào chúng ta có thể sử dụng con trỏ theo cách đó.
Cho đến nay khi chúng ta sử dụng scanf để nhập giá trị, chúng ta phải sử dụng toán tử dấu và bất cứ
khi nào chúng ta có kiểu dữ liệu inter hoặc float. Lần duy nhất chúng ta có nó là khi chúng ta
có một mảng ký tự và lý do cho điều đó là vì ký tự một
thực sự là một con trỏ ký tự mà chúng ta sẽ nói đến.
Nhưng nếu chúng ta sử dụng scanf để nhập các giá trị và chúng ta sử dụng chúng trên
các kiểu dữ liệu bình thường không phải là mảng ký tự, chúng ta luôn phải sử dụng toán tử bổ sung hoặc phụ này.
Và lý do cho điều đó là đối số thứ hai của scanf là một con trỏ.
Vì vậy, chúng tôi phải gửi cho nó một địa chỉ. Con trỏ chỉ có giá trị của địa chỉ.
Vì vậy, khi bạn có một con trỏ đã chứa một địa chỉ, bạn có thể sử dụng tên con trỏ làm đối số cho scanf.
Vì vậy, bây giờ bạn không phải sử dụng toán tử dấu và nếu bạn thực sự tạo
một con trỏ, vì đối số thứ hai của scanf là một con trỏ và vì vậy
bạn chỉ có thể nói tên con trỏ.
Trước đây, nếu chúng ta muốn lưu trữ một giá trị trong giá trị,
chúng ta sẽ nói ký hiệu
và giá trị trong đối số thứ hai của scanf.
Nhưng nếu chúng ta có một con trỏ mà chúng ta tạo và nó đã
trỏ đến một địa chỉ như trong ví
dụ này, thì khi chúng ta sử dụng scanf, tất cả những gì chúng ta phải nói là tên của
giá trị, tên của con trỏ.
Vì vậy, đây là một trường hợp khi chúng ta có một số nguyên, nhưng chúng
ta không phải sử dụng ký hiệu và vì chúng ta có một con trỏ đến một số nguyên.
Chúng tôi chỉ nói giá trị phần trăm d, p.
Vì vậy, có những lúc khác khi bạn có thể chuyển các
tên thông thường của các biến vào scanf bên cạnh các mảng ký tự nếu bạn
có một con trỏ.
Bạn cũng có thể in ra những gì họ đã nhập sau đó và bạn sẽ nhận thấy
rằng giá trị thực sự sẽ được thay đổi thành bất kỳ giá trị nào họ
đã nhập vì chúng tôi đang trỏ đến địa chỉ đó.
Đang kiểm tra null.
Có một quy tắc mà bạn phải ghi vào bộ nhớ của mình. Điều này là rất, rất quan trọng.
Chúng ta đã nói về việc bỏ tham chiếu, nhưng điều gì sẽ xảy ra nếu bạn bỏ
qua một con trỏ không chủ ý, một con trỏ trỏ đến không có
gì hoặc một con trỏ không được cấp phát bộ nhớ cho nó.
Vì vậy, điều gì sẽ xảy ra nếu chúng ta làm điều gì đó như thế này. Chúng tôi khai báo một con trỏ,
nhưng chúng tôi chưa bao giờ thực sự khởi tạo nó, và sau đó chúng tôi cố gắng gán cho nó.
Chúng tôi bỏ tham chiếu và gán cho nó, đó là một sai lầm lớn.
Vì vậy, dòng thứ hai về cơ bản có nghĩa là
bạn muốn lưu trữ giá trị 5 ở vị trí mà pt
trỏ đến, nhưng pt không trỏ đến bất kỳ thứ gì vì nó chưa được khởi tạo.
Vì vậy, pt bây giờ sẽ có một giá trị ngẫu nhiên.
Vì vậy, không biết số 5 sẽ được đặt ở đâu, nó có thể được đặt ở đâu trong bộ nhớ.
Điều này có thể vô hại. Nó có thể làm quá
tải dữ liệu hiện có hoặc các biến trạng thái hiện có trong chương trình của bạn.
Nó có thể khiến chương trình bị lỗi. Nó rất có vấn đề.
Vì vậy, khi bạn tạo một con trỏ và bạn cấp phát bộ nhớ để lưu trữ chính con trỏ, nó sẽ
không cấp phát bộ nhớ để lưu trữ dữ liệu.
Vì vậy, bằng cách nói instar pt, đã cấp
phát bộ nhớ cho con trỏ, nhưng nó không cấp
phát bất kỳ bộ nhớ nào cho giá trị
của con trỏ, địa chỉ. Hãy nhớ rằng, con trỏ chứa địa chỉ.
Nó tạo ra con trỏ nhưng nó không tạo bất kỳ bộ nhớ nào cho những gì nó trỏ tới.
Vì vậy, bạn không thể bỏ qua nó.
Vì vậy, nó không cấp phát bộ nhớ để lưu trữ dữ liệu.
Trước khi bạn sử dụng con trỏ, nó phải được gán một vị trí bộ nhớ đã được cấp phát
hoặc bạn phải sử dụng cấp phát bộ nhớ động bằng cách sử dụng malloc mà chúng ta sẽ
nói về Vì vậy, bạn có thể gán địa chỉ của một biến hiện có cho
con trỏ hoặc bạn sử dụng malloc là cấp phát bộ nhớ động.
Nhưng hãy ghi nhớ điều đó bất cứ khi nào bạn sử dụng con trỏ nếu bạn đã tạo
nó và nó là null, bạn muốn kiểm tra nó trước để tìm null,
chúng ta sẽ nói về điều đó sau một giây. Nhưng nếu bạn đã tạo một con
trỏ chưa được khởi tạo, đừng gán bất kỳ thứ gì cho
nó trừ khi nó trỏ đến một biến khác được khởi tạo theo cách đó hoặc được cấp phát bộ nhớ.
Vì vậy, đây là lúc null phát huy tác dụng.
Bạn thực sự có thể kiểm tra null để đảm
bảo rằng bạn không có lỗi tham khảo. Đảm bảo rằng chương trình của bạn không bị lỗi.
Vì vậy, chúng ta đã biết rằng null về cơ bản chỉ
đến không và chúng ta nên khởi tạo tất cả các biến, con trỏ
của chúng ta thành null.
Vì vậy, chúng ta nên luôn luôn làm một cái gì đó như thế này.
Null là một ký hiệu đặc biệt trong c đại diện cho con trỏ tương đương với
số 0 với các số thông thường.
Bên dưới cũng đặt một con trỏ thành null bằng cách sử dụng số không.
Vì vậy, chúng ta cũng có thể nếu chúng ta không muốn chuyển nó hoặc gán nó cho null, chúng ta chỉ có thể
nói 0 và điều đó tương đương với việc nói chỉ đến không.
Vì vậy, bởi vì null tương đương với 0, nếu bạn muốn kiểm
tra xem giá trị p có phải là null hay không, bạn có thể làm điều gì đó giống như
sử dụng các bài kiểm tra tường minh. Bạn có thể nói con trỏ bằng null.
Và nếu con trỏ bằng null nghĩa là nó bằng 0, thì
bạn thực sự có thể làm điều gì đó.
Vì vậy, nếu nó không phải là 0 hoặc không phải null, thì đó là một giá trị true hoặc bất kỳ
giá trị nào khác, đó là một cách để kiểm tra xem có bị treo không.
Bạn đảm bảo rằng trước khi thực sự cố gắng bỏ qua một cái
gì đó, điều này sẽ cho bạn biết liệu nó có được cấp phát bộ nhớ hay không.
Vì vậy, bạn muốn kiểm tra null trước khi tham khảo một con trỏ.
Và bạn thường làm điều này trong các hàm
vì các hàm sẽ nhận con trỏ làm tham số.
Và nếu người gọi đang
chuyển dữ liệu xấu hoặc chuyển vào một con trỏ không được cấp phát bất kỳ bộ nhớ nào,
nó có thể làm hỏng mã của bạn. Vì vậy, những gì bạn muốn làm là bạn muốn đảm bảo
rằng người gọi có một địa chỉ hợp lệ để bạn có thể kiểm tra xem nó có rỗng hay không.
Về cơ bản, điều này có nghĩa là luôn luôn có những điều này nếu kiểm tra
không phải là giá trị p hoặc không phải là con trỏ.
Và nếu nó không phải là con trỏ, thì bạn có thể bỏ qua nó.
Chúng ta đang nói nhiều về con trỏ. Chúng tôi đã thảo luận khá nhiều.
Tôi chắc rằng nó đang có một chút áp đảo. Bạn có thể muốn nghỉ ngơi và
xem qua các bài giảng trước, cố gắng thực sự đồng bộ hóa khái niệm này trong đầu bạn.
Con trỏ chỉ chứa địa chỉ.
Nhưng có 3 phần của nó, vì vậy nó có thể có vấn đề.
Nhưng hãy luôn lạc quan. Giữ bên mình và tôi biết
điều đó thật khó hiểu.
Chúng tôi đã nói về cách làm việc với các địa chỉ.
Chúng tôi đã nói về việc làm việc với các giá trị. Chúng ta đã nói về cách làm việc với chính
con trỏ và chúng ta đã nói về cách làm việc với các biến trỏ tới con trỏ.
Vì vậy, có tất cả những
thứ bạn phải nhớ, và nó có thể rất choáng ngợp và khó chịu.
Và luôn luôn khó để cố gắng tìm ra những gì đang xảy ra và nó sẽ phải thực hành rất nhiều.
Cách tốt nhất để hiểu khái niệm này và mọi thứ chúng tôi đã nói chuyện cho
đến bây giờ là thực hành,
viết các chương trình ngắn sử dụng tất cả các khái niệm tôi đã đề cập.
Vì vậy, hãy viết một chương trình lấy các giá
trị bằng cách sử dụng một con trỏ, điều này có thể sử dụng
toán tử chuyển hướng, hội nghị. Viết chương trình thay đổi giá trị bằng con trỏ.
Vì vậy, đây sẽ là tham chiếu, nhận các giá trị bằng cách sử dụng con trỏ
sẽ chỉ là tên của con trỏ sẽ là địa chỉ. In địa chỉ, chúng tôi đã xem qua tất cả cú pháp đó.
Thực hành điều này lặp đi lặp lại và đó là cách bạn sẽ làm tốt nó.
Bạn phải nâng cao sự tự tin của mình và bạn phải nghiên cứu chi tiết những khái
niệm này để nắm vững chúng.
Chúng ta vẫn còn nhiều điều để nói về các gợi ý, nhưng đây có thể là lúc bạn chỉ cần bước đi và
xem lại những gì chúng ta đã nói cho đến nay để nó đi sâu vào đầu bạn.
Cảm ơn bạn.