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ề định nghĩa con trỏ, chủ yếu là cú
pháp khai báo báo cáo và sau đó sử dụng toán tử địa chỉ để gán
địa chỉ bộ nhớ cho một con trỏ.
Vì vậy, cho đến thời điểm này, chúng ta nên tìm
hiểu kỹ rằng con trỏ không gì khác hơn là
một biến trỏ đến địa chỉ bộ nhớ hoặc chứa địa chỉ bộ nhớ làm giá trị của nó.
Vì vậy, khai báo một con trỏ nó không giống như việc tạo một con trỏ bình thường.
Vì vậy, bạn không thể làm điều gì đó giống như con trỏ con trỏ.
Đó không phải là cách để khai báo một con trỏ. Cú pháp hơi khác một chút.
Bạn sử dụng dấu hoa thị. Vì vậy, không đủ để nói rằng một biến là một con trỏ.
Bạn cũng phải chỉ định loại biến mà con trỏ trỏ đến.
Các loại biến khác nhau chiếm lượng dung lượng lưu trữ khác nhau.
Một số hoạt động con trỏ yêu cầu kiến thức về kích thước lưu trữ đó.
Vì vậy, cũng giống như một biến thông thường khi bạn chỉ định một
kiểu dữ liệu, khi bạn tạo một biến kiểu dữ liệu con
trỏ, bạn cũng phải chỉ định kiểu dữ liệu đó.
Bạn có thể khai báo một con trỏ đến một biến kiểu int bằng cách thực hiện
như sau, số p dấu sao hoặc dấu sao.
Điều đó sẽ cho bạn biết rằng đó là một con trỏ.
Int trông giống nhau, nhưng sau đó là dấu hoa thị.
Dấu hoa thị biểu thị rằng một con trỏ và sau đó bạn chỉ
định loại của chính con trỏ đó. Đây là một con trỏ int.
Kiểu của biến có tên p số int star.
Nó có thể lưu trữ địa chỉ của bất kỳ biến nào kiểu int.
Một con trỏ lưu trữ các địa chỉ. Vì vậy, nếu bạn
định lưu trữ địa chỉ của một biến khác, thì biến
đó phải được xác định là một kiểu số nguyên.
Vì vậy, ở đây PI là trỏ
đến biến int,
char star pc, đó là trỏ đến một biến ký tự,
float star pf star pg, đó là những con trỏ đến biến float.
Đó là cách bạn xác định chúng, loại quan trọng.
Khoảng cách giữa dấu hoa thị và tên con trỏ là tùy chọn.
Bạn không cần phải đặt một khoảng trống ở đó. Bạn có thể không có không gian.
Cuối cùng thì điều gì sẽ xảy
ra, và chúng ta sẽ nói về việc bỏ tham chiếu một biến là bạn thường sử dụng một khoảng trắng trong khai báo và
sau đó khi bạn đang tham chiếu, bạn không sử dụng nó.
Vì vậy, tất cả các khai báo này nên chứa một khoảng trắng theo quy ước.
Giá trị của một con trỏ là một địa
chỉ, vì vậy nó phải được biểu diễn bên trong dưới dạng một hình ảnh không dấu trên hầu hết các hệ thống.
Vì vậy, nó vẫn phải lưu trữ một cái gì đó. Nó chỉ xảy ra khi nó lưu trữ một số thập lục phân.
Và mặc dù nó đang lưu trữ nó như một số nguyên, nhưng
đừng nghĩ nó là một kiểu số nguyên.
Những điều tương tự mà bạn có thể làm với số nguyên, bạn không nhất thiết phải làm với con trỏ và ngược lại.
Vì vậy, mặc dù nếu bạn cố gắng in nó ra, nó sẽ trông giống như, một số là một số thập lục phân, điều đó không
có nghĩa là bạn có thể coi nó như một số nguyên.
Ví dụ, bạn có thể nhân một số nguyên với một số nguyên
khác, nhưng bạn không thể nhân một con trỏ với một con trỏ khác.
Một con trỏ thực sự là một kiểu mới, nó không phải là một kiểu số nguyên.
Phần trăm p đại diện cho định dạng được chỉ định cho con trỏ.
Tôi sẽ xem xét việc hiển thị các dữ liệu khác nhau cho một con trỏ và chúng ta sẽ xem nó được sử dụng như thế nào.
Các khai báo trước tạo
biến nhưng không có khởi tạo. Không có nhiệm vụ ở đó.
Bạn luôn muốn gán một giá trị cho một
con trỏ, điều đó rất nguy hiểm nếu bạn không khởi tạo giá trị đó.
Vì vậy, bạn muốn khởi tạo một con trỏ khi bạn khai báo nó.
Nếu bạn không biết phải khởi tạo nó bằng địa
chỉ nào nếu đó không phải là địa chỉ của biến
khác hoặc bạn không cấp phát động bộ nhớ cho nó, bạn có thể sử dụng con trỏ null.
Vì vậy, bạn có thể khởi tạo một con trỏ để nó không trỏ đến bất cứ thứ gì.
Bạn làm điều này bằng cách sử dụng null.
Bạn nói rằng số p thể hiện bằng null cho một con trỏ đến một int.
Null là một hằng số được xác định bởi thư viện chuẩn.
Nó tương đương với số 0 cho một con trỏ.
Nó có nghĩa là nó không chỉ ra bất cứ điều gì.
Nó được đảm bảo không trỏ đến bất kỳ vị trí nào trong bộ nhớ.
Vì vậy, điều này tốt là bạn muốn làm điều này vì điều đó có nghĩa là bạn
sẽ không mắc bất kỳ lỗi nào khi vô tình làm tràn bộ đệm hoặc ghi
vào bộ nhớ mà bạn không được phép ghi vào.
Bằng cách khởi tạo nó, nó thực sự hạn chế một số sai lầm mà bạn có thể mắc phải.
Chúng ta đã nói về null một chút trước đây. Chúng tôi đã nói về ký tự null.
Khái niệm đó khác với con trỏ null.
Một con trỏ null có nghĩa là nó không trỏ đến bất kỳ thứ gì và nó phải được khởi tạo với điều đó.
Bạn cần thêm một chỉ thị bao gồm cho định nghĩa tiêu chuẩn. h nếu bạn muốn sử dụng định
nghĩa rỗng ở đây.
Địa chỉ của nhà điều hành. Nếu bạn muốn gán con trỏ của
mình cho địa chỉ, bạn
có thể sử dụng toán tử địa chỉ của một biến hiện có.
Vì vậy, nếu bạn muốn khởi tạo biến của mình bằng biến thêm hoặc biến phụ, bạn
đã khai báo, bạn sử dụng địa chỉ của toán tử, ký hiệu và.
Chúng tôi đã thấy điều này khi chúng tôi thảo luận về hàm scanf.
Ở đây chúng tôi đang gán một biến giá trị số nguyên 99.
Chúng tôi đang tạo một con trỏ kiểu int và chúng tôi đang gán cho nó địa chỉ của số.
Chúng ta có thể làm điều này bởi vì number
là một int và con trỏ mà chúng ta đã tạo cũng trỏ đến một int.
Vì vậy, tất cả những gì chúng ta phải làm sau khi toán tử bằng là sử dụng dấu và.
Và vì vậy bây giờ số p sẽ chứa địa chỉ của số.
Giá trị ban đầu của số p là địa chỉ của biến số.
Khai báo số phải đứng trước khai báo con trỏ lưu địa chỉ
của nó vì bạn
không thể gán cho con trỏ thứ gì đó
không được cấp phát bộ nhớ.
Nếu bạn cố gắng gán cho số con trỏ đó, số đó sẽ không tồn tại trừ khi bạn làm điều đó sau đó.
Để gán một địa chỉ cho một con trỏ,
địa chỉ đó phải được cấp phát bộ nhớ cho nó.
Nếu không, trình biên dịch sẽ phàn nàn.
Tuy nhiên, hãy cẩn thận vì không có gì đặc biệt về việc khai báo một con trỏ.
Bạn có thể khai báo các biến thông thường và con trỏ trong cùng một câu lệnh.
Vì vậy, bạn có thể nói giá trị gấp đôi, giá trị p f num.
Trong câu lệnh này, đây là biến thứ
hai p val là một con trỏ, hai biến còn lại chỉ là biến đôi.
Đó là một chút rõ ràng hơn một chút, rõ ràng hơn
một chút trong tuyên bố đó. Nhưng điều gì sẽ xảy ra nếu bạn nói trong
pq ngôi sao, điều này ngụ ý rằng chúng đều là con trỏ và chúng không phải.
Chúng ta chỉ có một con trỏ int ở đây là
p, biến q chỉ để nhập int.
Đó là một sai lầm phổ biến khi nghĩ rằng cả p và q đều là con trỏ.
Vì vậy, hãy cẩn thận khi bạn khai báo một con trỏ trên nhiều biến trên cùng một dòng.
Bạn cũng nên sử dụng các tên bắt đầu bằng p làm tên con trỏ.
Điều này sẽ cho bạn biết rằng, biến đó là một con trỏ chỉ bằng cách nhìn vào nó.
Vì vậy, thông thường bạn thực hiện tất cả các khai báo của bạn về các
biến ở đầu chương trình, thường là bên trong hàm main.
Và khi bạn nhìn thấy các biến đó được sử dụng
sau này trong chương trình, bạn có thể dễ dàng xác định các kiểu dữ liệu
khác nhau hoặc các kiểu con trỏ khác nhau vì chúng có p làm tiền tố.
Vì vậy, bài giảng này chỉ đề cập
đến cách bạn có thể định nghĩa, khai báo một con trỏ và sau đó gán
địa chỉ của một biến hiện có cho một con trỏ.
Bây giờ, có những trường hợp khi bạn không muốn nhất thiết phải
gán giá trị con trỏ cho một biến hiện có, có thể bạn muốn cấp phát bộ nhớ mới.
Chúng ta sẽ nói về những điều đó trong bài giảng tiếp theo. Nhưng ngay bây giờ, chúng tôi sẽ giữ cho nó đơn giản.
Chúng ta sẽ tập trung vào việc sử dụng các con
trỏ kiểu int và các kiểu dễ dàng khác nhau như double hoặc float.
Và chúng tôi sẽ tập trung vào việc
gán các biến hiện có, địa chỉ của và xem cách hoạt động của nó.
Vì vậy, chúng ta hãy tiến về phía trước. Cảm ơn bạn.