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ề mối quan hệ giữa con trỏ và mảng.
Có một mối quan hệ chặt chẽ và chúng ta cần hiểu mối quan hệ này trước khi chúng ta thực
sự có thể nói về số học con trỏ. Vậy hãy bắt đầu.
Mảng là một tập hợp các đối tượng cùng kiểu mà bạn
có thể tham khảo để sử dụng một tên duy nhất. Chúng tôi biết rằng hiện tại chúng tôi khá giỏi về mảng.
Chúng tôi đã sử dụng mảng ký tự cho một vài phần bây giờ.
Đó là một mảng mà bạn có thể truy cập bằng cách sử dụng chỉ mục
hoặc chỉ số con bên trong các dấu ngoặc đó. Chúng tôi ghi nhớ điều đó.
Chúng ta biết rằng các mảng bằng 0 dựa trên chúng bắt đầu từ 0.
Nhưng một lần nữa, đó chỉ là một cách để giữ nhiều tháng với cùng một tên biến.
Con trỏ là một biến có giá trị của nó, một địa chỉ bộ nhớ là giá trị của
nó và nó có
thể tham chiếu đến một biến hoặc hằng số khác của một kiểu nhất định.
Tại thời điểm này, chúng ta cũng nên khá rõ ràng về con trỏ là gì.
Nó chỉ giữ một địa chỉ bộ nhớ.
Bạn có thể sử dụng một con trỏ để giữ địa chỉ của các biến khác nhau tại các thời điểm khác nhau.
Nhưng bạn phải có cùng một loại. Một con trỏ int phải
trỏ đến để khôi phục địa chỉ của kiểu int.
Mảng và con trỏ có vẻ khá khác nhau, nhưng chúng
có liên quan rất chặt chẽ và đôi khi có thể được sử dụng thay thế cho nhau,
đặc biệt là với mảng ký tự.
Bạn thực sự có thể tạo một ký tự ghi nhớ là
một chuỗi và bạn có thể tạo một con trỏ ký tự về cơ bản giống nhau.
Chỉ có sự khác biệt nhỏ về việc
bạn có phân bổ bộ nhớ và giải phóng bộ nhớ bằng con trỏ ký tự hay không.
Với mảng ký tự, bạn không phải làm như
vậy, nhưng ký tự a cũng có kích thước cố định.
Vì vậy, nếu bạn tạo một chuỗi mảng ký tự với
kích thước của nó là 20, bạn chỉ có thể lưu trữ 19 ký tự.
Với con trỏ ký tự, bạn có thể sử dụng quản lý
bộ nhớ động và bạn có thể tăng hoặc giảm kích thước, nó có thể
hiệu quả hơn liên quan đến bộ nhớ.
Nhưng một trong những cách sử dụng phổ biến nhất của con trỏ trong c là con trỏ đến mảng.
Đây là khi bạn thường xuyên sử
dụng con trỏ nhất, đặc biệt là các ký tự.
Con trỏ ký tự giống như một mảng ký tự.
Các lý do chính của việc sử dụng con trỏ để
xóa là vì sự tiện lợi về mặt lưu ý và hiệu quả của chương trình.
Vì vậy, bạn có thể sử dụng một mảng hoặc một con trỏ trong nhiều trường hợp ngoại
trừ khi bạn đang nói về quản lý bộ nhớ động.
Nhưng trong hầu hết các trường hợp, bạn có thể. Và thực sự sự khác biệt duy nhất là cú
pháp, đó là ký hiệu.
Đó là việc bạn có sử dụng chỉ số con để truy cập một phần tử hay
không hoặc bạn có sử dụng số học điểm hay
không cho dù bạn có sử dụng con trỏ ký tự để trỏ đến địa chỉ cụ thể của phần tử đó hay không.
Nó cũng hiệu quả hơn khi sử dụng con trỏ ký tự.
Các con trỏ tới mảng thường dẫn đến mã sử dụng ít bộ nhớ hơn và thực thi nhanh hơn.
Vì vậy, bạn muốn sử dụng một con trỏ cho các ký tự càng nhiều
càng tốt và một con trỏ cho các kiểu dữ liệu khác.
Bởi vì nó nhanh hơn và sử dụng ít bộ nhớ hơn. Con trỏ qua các mảng cho hầu hết các phần.
Nếu bạn có một mảng 100 số nguyên, chúng tôi biết
điều này có nghĩa là gì, bạn chỉ cần nói giá trị int là 100. 100 là kích thước.
Điều đó có nghĩa là bạn có thể lưu trữ 100 số nguyên trong mảng đó.
Bạn cũng có thể xác định một con trỏ. Chúng ta sẽ đặt tên cho nó là con trỏ
giá trị vì nó trỏ đến mảng
giá trị và nó có thể được sử dụng để truy cập các số nguyên có trong mảng này.
Vì vậy, chúng tôi chỉ nói con trỏ giá trị thể hiện. Chúng ta biết cách khai báo một con trỏ tại thời điểm này.
Khi bạn xác định một con trỏ được sử dụng để trỏ các
phần tử của mảng, bạn không chỉ định con trỏ làm kiểu con trỏ tới mảng.
Cho đến thời điểm này, tất cả những gì chúng ta từng nghe về là con trỏ để kết
thúc, con trỏ để tăng gấp đôi.
Nhưng khi bạn đang sử dụng mảng, bạn không nói mảng nhọn.
Con trỏ thực tế đó đang trỏ đến một phần tử cụ thể có trong mảng.
Vì vậy, hãy ghi nhớ điều đó. Nó không thực sự là toàn bộ mảng khi
bạn xóa một con trỏ có địa chỉ của các giá trị.
Vì vậy, để đặt con trỏ giá trị trỏ đến phần tử đầu tiên của mảng giá trị, tất cả những
gì bạn phải làm là nói giá trị trỏ hoặc giá trị bằng.
Bạn không cần phải đặt địa chỉ ở đó hay bất cứ thứ gì. Bởi vì mảng
giá trị là một con trỏ.
Đó là những gì bạn phải lái xe trong đầu vì tất cả
các mảng này là con trỏ bên dưới mui xe.
Vì vậy, nếu bạn muốn gán phần tử đầu
tiên của một mảng cho một con trỏ, tất cả những gì bạn phải làm là chỉ định mảng
ở phía bên phải của toán tử bằng
và ở phía bên trái, bạn chỉ có con trỏ giá trị.
Điều này sẽ trỏ đến địa chỉ đầu tiên trong mảng hoặc phần tử đầu tiên.
Toán tử địa chỉ không được sử dụng, lưu ý rằng.
Trình biên dịch c xử lý sự xuất hiện của tên mảng mà
không có chỉ số con như một con trỏ đến mảng.
Vì vậy, việc chỉ định các giá trị mà không có chỉ số con có
tác dụng tạo ra một con trỏ đến phần tử đầu tiên của các giá trị.
Và điều này có nghĩa là bây giờ bạn có thể trỏ đến các
giá trị tiếp theo trong mảng bằng cách tăng con trỏ, để đi đến địa chỉ tiếp theo.
Và đó là những gì chúng ta sẽ nói đến trong một vài bài giảng tiếp theo khi chúng ta nói về số học điểm.
Và nó thực sự chỉ là một thứ ký hiệu và nó cũng là một thứ hiệu quả.
Vì vậy, một cách tương đương để tạo ra một con trỏ đến đầu các giá trị là
cũng áp dụng địa chỉ của toán tử cho phần tử đầu tiên của bên phải.
Vì vậy, bạn có thể làm theo hai cách, cách nào cũng được.
Nhưng bạn cũng có thể làm điều này. Bạn có thể nói địa chỉ con trỏ giá trị của giá trị nhỏ hơn không.
Điều đó sẽ đặt con trỏ giá trị thành phần tử đầu tiên trong mảng.
Vì vậy, bạn có thể sử dụng cái này hoặc bạn chỉ có thể nói giá trị điểm bằng giá trị.
Rõ ràng, không có dấu và và không có chỉ
số con, nó sẽ ít mã hơn một chút hoặc dễ viết hơn.
Điều này có thể rõ ràng hơn một chút
vì bạn không nhất thiết phải biết rằng các giá trị là một mảng trừ khi bạn nhìn vào phần khai báo.
Nhưng một lần nữa, một trong hai cách đều tốt. Con trỏ giá trị bằng giá trị hoặc con
trỏ giá trị bằng địa chỉ của giá trị nhỏ hơn không.
Đó là vấn đề về sở thích của lập trình viên. Và một lần nữa, đó là một điều quan trọng.
Vì vậy, chỉ để
nhắc lại, khi bạn có hai biểu thức ar phụ
i và dấu hoa thị ar cộng với i,
chúng có nghĩa tương đương nhau.
Vì vậy, chúng tôi chỉ muốn đảm bảo rằng bạn hiểu điều này.
Cả hai đều hoạt động nếu ar là tên của một mảng.
Bạn có thể sử dụng con trỏ và bạn có thể hủy tham chiếu nó.
Và cả hai đều hoạt động nếu nó là một biến con trỏ.
Sử dụng một biểu thức chẳng hạn như ar plus plus chỉ hoạt động nếu ar là một biến con trỏ.
Vì vậy, bạn không thể tăng một mảng bằng cách
nói dấu cộng và mong đợi nó chuyển đến phần tử tiếp theo.
Bạn chỉ có thể làm điều đó trên con trỏ mảng hoặc con trỏ.
Vì vậy, nếu chúng ta có ar đó là một con trỏ trỏ đến mảng và chúng ta muốn
chuyển đến phần tử tiếp theo, chúng ta có thể tăng nó mỗi lần.
Nhưng nếu bạn nói ar sub-i vì ar sub i là một mảng và một
mảng là một con trỏ, bạn có thể tham chiếu nó bằng cách nói ar là
ar là một con trỏ
mà chúng tôi đã gán ar cộng với i, nó giống nhau.
Vì vậy, trong vài bài giảng tiếp theo, chúng ta sẽ nói về số
học điểm và điều này liên quan chặt chẽ đến mối quan hệ giữa mảng và con trỏ.
Con trỏ có thể là mảng. Nó không phải là một mảng con trỏ, nó là một phần tử.
Vì vậy, bạn có thể sử dụng địa chỉ của một con
trỏ để điều hướng qua một mảng,
lặp qua một mảng. Cảm ơn bạn.