Xin chào, và chào mừng trở lại. Trong bài giảng này, tôi muốn cung cấp một
minh chứng cho thách thức trước đây của chúng tôi
đó là hiểu cách truyền qua tham chiếu,
có một tham số bên trong của một hàm lấy một con trỏ.
Vì vậy, hãy tạo một dự án mới. Chúng tôi sẽ gọi đây là một
con trỏ truyền qua tham chiếu vì đó là những gì nó thể hiện,
những thứ cơ bản ở đây, dự án mới, ứng
dụng bảng điều khiển c. Khá đơn giản ở đây.
Hãy chỉ gọi con trỏ này là chuyển
qua tham chiếu.
Một lần nữa, trình bày cách chúng ta có thể sử dụng các tham số bên trong một
hàm để truyền dữ liệu và cách dữ liệu đó sau đó sẽ
được sửa đổi bên ngoài hàm.
Vì vậy, điều đầu tiên chúng ta sẽ làm là tạo khai báo hàm, nguyên mẫu
hàm của chúng ta. Điều này luôn được thực hiện để
bạn có thể gọi ở bất kỳ đâu trong chương trình của mình. Chúng tôi sẽ gọi nó là hình vuông.
Điều chính trong khai báo hàm này là nó sẽ lấy một con trỏ.
Vì vậy, nó sẽ chỉ lấy một con trỏ kết thúc, vì vậy chúng tôi sẽ nói int star và
sau đó bạn có thể đặt cho nó bất kỳ tên nào bạn muốn và bạn kết thúc nó bằng dấu chấm phẩy.
Và chức năng chính của chúng ta,
trước tiên chúng ta sẽ làm là chúng ta sẽ tạo một biến số nguyên
thông thường và chúng ta sẽ chỉ nói int num và chúng ta sẽ chỉ nói mã cứng nó thành 9.
Và những gì chúng ta sẽ làm là chúng ta sẽ gọi hàm bình phương của chúng ta.
Hàm vuông của chúng ta sẽ không trả về bất kỳ dữ liệu nào, nó sẽ bị vô hiệu hóa.
Bây giờ chúng ta phải chuyển cho nó một địa chỉ vì hàm bình phương của chúng ta trên dòng 4 đang nhận một con trỏ.
Vì vậy, chúng ta không thể chuyển một num, chúng ta sẽ phải thực sự chuyển vào địa chỉ của num, và sau
đó chúng ta sẽ kết thúc nó bằng dấu chấm phẩy. Vì vậy, chúng tôi gọi hàm
bằng cách sử dụng tên hàm và sau đó truyền địa chỉ của biến.
Bởi vì biến ở đây trong một dòng tám không phải là một con trỏ.
Sau đó, về cơ bản chúng ta có thể in ra giá trị của num.
Và một lần nữa, những gì bạn sẽ nhận thấy ở đây là bởi
vì chúng tôi đang chuyển địa chỉ, nếu chúng tôi thay đổi dữ liệu trong chính hàm cho
biến đó, nó sẽ thay đổi bên ngoài nó. Vì vậy, ở đây chúng ta sẽ
nói bình phương của số đã cho là và nó chỉ là phần trăm d, chúng
ta sẽ thêm một nguồn cấp dữ liệu
dòng và chúng ta sẽ in ra num, và num sẽ không
phải là 9. , Tôi sẽ nói với bạn nhiều điều đó.
Và sau đó chúng tôi sẽ chỉ trả về 0 cho hàm thông thường của chúng tôi.
Vì vậy, bây giờ chúng ta phải thực sự triển khai chức năng, xác định nó.
Để định nghĩa nó, tôi chỉ nói void square.
Chúng tôi biết rằng nó cần một con trỏ số nguyên, vì vậy tôi sẽ nói int star x.
Và bây giờ chúng tôi muốn nhân nó với chính nó.
Nhưng chúng tôi muốn đảm bảo rằng chúng tôi không thay đổi địa chỉ.
Vì vậy, những gì chúng ta có thể làm ở đây là chúng ta có thể đặt hằng
số này thành một hằng số, nhưng bạn muốn đặt
hằng số sau kiểu dữ liệu vì chúng ta không muốn thay đổi
giá trị của x là gì hoặc địa chỉ của thứ mà nó trỏ đến. chúng ta có thể nói int hằng số.
Nếu chúng tôi không muốn thay đổi giá trị của
x, chúng tôi sẽ nói là hằng số. Nhưng chúng tôi muốn thay đổi giá trị của x, chúng tôi sẽ tự bình phương nó.
Vì vậy, để bình phương nó, trước hết, điều chúng ta muốn thay
đổi là giá trị cuối cùng của x. Vì vậy chúng ta phải sử
dụng toán tử điều hướng. Chúng tôi phải hủy tham chiếu nó bằng dấu hoa thị.
Và sau đó chúng ta sẽ nói bằng, chúng ta không muốn thực
hiện x nhân với x bởi vì điều đó sẽ nhân các địa chỉ. X là một con trỏ, chúng ta không muốn chỉ nhận giá
trị của x mà chúng ta muốn nhận giá trị của cái mà x đang trỏ tới.
Vì vậy, một lần nữa, chúng ta phải khử tham chiếu nó và
sau đó chúng ta sẽ nhân nó với chính nó. Chúng tôi sẽ khử tham chiếu nó hai lần.
Có thể là một ý tưởng hay nếu
đặt điều này trong ngoặc đơn để có thể dễ dàng hiểu được những gì đang xảy ra ở đây.
Bạn đang hủy tham chiếu con trỏ, nhận giá trị của nó và sau đó
nhân với giá trị của nó và sau đó bạn chỉ cần thêm dấu chấm phẩy, và
đó là tất cả những gì bạn phải làm. Vì vậy, khi chúng tôi chạy chương trình này, nó
sẽ in ra 81.
Nó sẽ in ra giá trị của num. Num sẽ thay đổi bên trong hình vuông bởi vì
chúng tôi đang chuyển địa chỉ đến đó.
Chúng tôi thực sự không thể thay đổi giá trị của con trỏ,
vì vậy chúng tôi có hằng số sau kiểu.
Vì vậy, ở đây chúng tôi nói xây dựng và có vẻ
như chúng tôi đã không thay đổi khai báo.
Và bây giờ chúng tôi chỉ muốn đảm bảo rằng
mọi thứ khác là chính xác.
Nếu bạn muốn con trỏ không đổi, bạn phải
đặt nó sau dấu hoa thị.
Vì vậy, hằng số int start
có nghĩa là bạn không thể thay đổi giá
trị của x, đó là địa chỉ của num.
Nếu chúng ta đặt const trước int hoặc
sau input trước dấu hoa thị, điều đó có nghĩa
là bạn không thể thay đổi giá trị của những gì con trỏ đang trỏ tới.
Vì vậy, bây giờ khi chúng ta chạy nó, chúng ta sẽ thấy đầu ra là 81.
Một lần nữa, điều này
cho chúng ta biết là chúng ta đã sửa đổi
dữ liệu. Biến này, biến
địa phương num này đã được sửa đổi bên trong hàm và giá trị của nó đã thay đổi.
Điều đó không bình thường. Chúng tôi đã không học được khái niệm đó cho đến bây giờ. Đó là thông qua tham khảo.
Nhưng trong c điều gì đang xảy ra là bạn đang chuyển một bản sao của địa chỉ.
Đó là lý do tại sao nó thực sự thừa, chúng ta thậm chí không cần hằng số bởi vì ngay
cả khi chúng ta đã thay đổi giá trị của con trỏ, nó là
một bản sao của giá trị con trỏ, vì vậy bạn không thực sự cần phải làm điều đó.
Bây giờ nếu chúng ta không muốn sử dụng một số hiện có, chúng ta có thể tạo một con
trỏ, chúng ta chỉ cần cấp phát bộ nhớ cho nó.
Vì vậy, những gì chúng ta sẽ phải làm ở đây là chúng ta có thể tạo một int star num.
Nhưng những gì chúng ta phải làm là trước tiên chúng ta phải ép kiểu malloc
bởi vì malloc quay trở lại với một con trỏ
void nhưng chúng ta có thể cấp phát bộ nhớ động.
Và ở đây, chúng ta phải nói thực sự chỉ
vì chúng ta đang tạo một số nguyên, chúng ta chỉ có thể nói kích thước của int
và điều đó sẽ cấp phát bộ nhớ cho chúng ta.
Và sau đó, tất cả những gì chúng ta phải làm là chuyển vào số bình phương.
Và sau đó khi
chúng ta xây dựng điều này, nó sẽ làm điều
tương tự nhưng bây giờ cũng không có giá trị
cho num vì vậy sẽ không thực
sự biết những gì cần tính toán, vì vậy bạn thực
sự phải gán giá trị của num chúng tôi sẽ nói
ở đây bốn, bạn bỏ tham chiếu nó. Và bây giờ khi bạn xây dựng và chạy
nó, bạn sẽ nhận được 16.
Bây giờ điều duy nhất ở đây là chúng ta muốn in ra giá trị, vì vậy chúng ta muốn nói num.
Và sau đó khi chúng tôi chạy nó, chúng tôi sẽ thấy 16.
Và nó thực sự chỉ là cùng một kiểu hành
vi, và chúng ta thấy có 16.
Điểm khác biệt duy nhất ở đây là chúng tôi đã phân
bổ bộ nhớ cho những gì điểm đang trỏ đến thay vì chỉ trỏ đến một vị trí
bộ nhớ hiện có bằng ký hiệu và.
Một lần nữa, những điều quan trọng cần lưu ý ở đây, con số này đang thay
đổi bên ngoài chức năng. Điều này được
thông qua bằng cách hiểu tham khảo. Trong đó chúng ta đang sử dụng toán tử hủy
tham chiếu, toán tử chuyển hướng để nhận giá trị của điểm đang trỏ tới.
Hiểu rằng nếu hàm nhận một con trỏ và chúng ta có một
con trỏ, chúng ta chỉ có thể gửi tên.
Nếu nó không lấy một con trỏ
và nó thực sự là một giá trị, thì chúng
ta phải hủy tham chiếu nó. Và điều này cũng giống như scanf.
Vì vậy, ở đây chúng ta phải nói dấu và.
Và sau đó khi chúng tôi in nó ra, chúng tôi sẽ
không phải khử tham chiếu bất cứ thứ gì vì nó không phải là một con trỏ
và sau đó điều đó sẽ tương tự ở đây.
Và sau đó hiểu const hai. Const trước dấu sao int nói rằng
giá trị mà điểm đang trỏ đến không thể thay đổi.
Const sau int start nói rằng địa chỉ của con trỏ không thể thay đổi giá trị của con trỏ.
Tôi hy vọng nó sẽ có ích.
Một lần nữa, hãy thử với cái này, thay đổi một số cú pháp, lộn xộn như tôi đã làm.
Nó sẽ giúp bạn học hỏi được rất nhiều điều. Cảm ơn bạn.