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 về thách thức
của chúng tôi đối với số học con trỏ và sử dụng công cụ sửa đổi hằng số.
Hãy đưa ra các khối mã. Tôi sẽ tạo một dự án mới. Chúng tôi sẽ đặt tên cho
ví dụ số học một con trỏ này.
Vì vậy, những gì chúng ta sẽ làm ở đây là chúng
ta sẽ thực sự xác định độ dài của một chuỗi bằng cách sử dụng số học điểm.
Vì vậy, điều đầu tiên tôi muốn làm là tôi muốn tạo khai báo hàm của mình.
Điều này sẽ trả về độ dài của chuỗi. Vì vậy, nó sẽ có int
làm kiểu trả về. Tôi sẽ gọi nó là độ dài chuỗi,
và điều này sẽ chỉ là một con trỏ, nhưng nó sẽ là một con trỏ không đổi.
Chúng tôi không muốn thay đổi giá trị của những gì đang trỏ tới.
Vì vậy, điều đó có nghĩa là chúng tôi sẽ sử dụng hằng số làm từ khóa đầu tiên,
và sau đó chúng tôi sẽ chỉ định loại, đó là một ký tự.
Và chúng ta sẽ nói là dấu sao, và chúng ta có thể đặt tên cho nó bất cứ thứ gì chúng ta muốn, chuỗi.
Một lần nữa chỉ để nhắc lại, nếu chúng ta đặt hằng số ở đây thay vào đó, điều
này sẽ nói rằng địa chỉ của con trỏ, giá trị
của con trỏ không thể thay đổi.
Nhưng một lần nữa, nó hơi thừa và không thực sự cần phải làm vì
chúng ta đang thực hiện việc chuyển từng giá trị từng bản sao.
Vì vậy, dù sao thì bạn cũng có một bản sao địa chỉ nên bạn có thay đổi địa chỉ ở đó hay không cũng không thành vấn đề.
Nhưng điều quan trọng là phải thay đổi những gì bạn đang hướng tới. Nếu bạn không muốn giá trị của những
gì bạn đang chỉ thay đổi, bạn chắc chắn muốn làm liên tục ở đây, và điều
đó quan trọng.
Vì vậy, bây giờ tất cả những gì chúng ta phải làm là chúng ta sẽ tạo chính của chúng ta.
tạo chính của chúng tôi. Tất cả những gì chúng ta sẽ
làm trong main của chúng ta là chúng ta sẽ gọi
độ dài chuỗi, một hàm độ dài chuỗi với các chuỗi khác nhau.
Vì vậy, chúng ta hãy in ra, và hãy nhớ, nó trả về một số nguyên để chúng ta có thể nói là phần trăm d
và chúng ta sẽ in ra độ dài của một vài chuỗi mà chúng ta vượt qua.
Vì vậy, chúng ta sẽ gọi độ dài chuỗi, và chúng
ta sẽ chuyển vào một số chuỗi không đổi, vì vậy chúng ta có thể đặt
mọi thứ trong dấu ngoặc kép ở đây. Chúng tôi thậm chí không phải tạo con trỏ.
Bạn có thể tạo một con trỏ và gán nó rồi chuyển nó vào, nhưng bạn
chỉ cần đảm bảo rằng nó là một hằng số.
Nhưng vì nó dễ dàng hơn với ít mã hơn, chúng ta chỉ có thể nói kiểm tra độ dài chuỗi.
Một lần nữa, đó là một chuỗi ký tự không đổi.
Chúng tôi sẽ kiểm tra nó với một số khác.
Chúng tôi sẽ đặt một khoảng trống sau nó. Hãy thêm một số nguồn cấp dữ liệu dòng.
Ở đây chúng tôi sẽ gọi độ dài chuỗi. Và thực ra chúng ta hãy gọi nó với chuỗi rỗng,
hãy đảm bảo rằng chúng ta biến 0. Và sau đó cái
thứ ba của chúng tôi, chúng tôi sẽ nói độ dài
chuỗi, chúng tôi sẽ chỉ nói jason.
Bây giờ, một cách ngẫu nhiên, khi bạn tạo và chuyển các liên kết độ dài chuỗi
này, chúng sẽ tự động nhận được dấu chấm dứt null được thêm vào chúng.
Chúng tôi học được điều đó khi chúng tôi khai báo con trỏ.
Đó là một trong những lợi thế. Nếu bạn định tạo một con trỏ và nó
sẽ là một chữ, bạn không muốn chỉ định kích thước.
Bạn muốn làm một cái gì đó giống như ký tự nếu đó là một mảng
vì một mảng là mảng là một con trỏ. Nhưng nếu chúng ta không
muốn chỉ định kích thước, chúng ta có thể
nói ký tự p và sau đó bên trong đây chúng ta có thể nói jason.
Hãy nhớ rằng bài học mà nếu chúng ta không chỉ định kích thước cho các mảng ký tự,
nó sẽ tự động thêm một dấu chấm hết null và tạo kích thước cho bạn.
Bằng cách đó bạn không mắc phải bất kỳ sai lầm nào. Nếu bạn đặt kích thước bên trong mảng,
bạn có thể không có đủ dấu chấm hết null.
Cũng giống như vậy khi chúng ta truyền ký tự cho độ dài chuỗi, ký tự
kết thúc null sẽ được thêm vào cuối của nó.
Vì vậy, chúng tôi có thể đã tạo các biến
này ban đầu và thực hiện một cái gì đó như thế này
và sau đó chuyển vào từng biến.
Nhưng tôi không muốn mất thời gian tạo các biến. Vì vậy, tôi sẽ chỉ làm điều đó.
Bây giờ điều thực sự quan trọng đối với mã này là hàm.
Vì vậy, chúng tôi sẽ tạo độ dài chuỗi của chúng tôi. Hãy nhớ lại, nó trả về một số nguyên
và nó sẽ là một hằng số. Vì vậy, chúng ta chỉ có thể nói chuỗi sao char không đổi.
Và bạn cũng lưu ý rằng tên biến khai báo
hàm không nhất thiết phải trùng khớp. Tôi có thể đặt nó dưới dạng chuỗi và điều đó cũng tốt.
Bây giờ bên trong hàm này, chúng ta phải tạo một con trỏ cục bộ vì con
trỏ cục bộ sẽ trỏ đến cuối chuỗi. Và sau đó khi chúng ta có địa chỉ cho
phần cuối của chuỗi, chúng ta có thể trừ đi địa chỉ cho phần đầu của chuỗi.
Địa chỉ cho phần đầu của chuỗi là địa chỉ được chuyển vào.
Chuỗi sẽ tự động trỏ đến phần tử đầu tiên trong mảng hoặc địa
chỉ đầu tiên của mảng.
Vì vậy, nếu chúng tôi tạo một con trỏ cục
bộ và chúng tôi sẽ chỉ muốn tạo lại một dấu sao
hằng số khác và chúng tôi sẽ chỉ nói địa chỉ cuối cùng thì sao.
Và điều này sẽ bằng với địa chỉ bắt đầu của chuỗi, và sau đó chúng ta sẽ
tăng nó lên mỗi lần trong vòng lặp của chúng ta.
Vì vậy, bây giờ chúng tôi có địa chỉ cuối cùng. Một lần nữa, đây là một biến
cục bộ sẽ lưu trữ địa chỉ ngay trước dấu chấm dứt null.
Vì vậy, bây giờ chúng ta có thể viết vòng lặp while của mình.
Và vòng lặp while của chúng ta sẽ thoát ra khi chúng ta nhìn thấy dấu chấm hết null.
Bây giờ chúng ta có thể làm điều này theo hai cách khác nhau.
Chúng tôi có thể so sánh các ký tự. Vì vậy, chúng tôi có thể nói một cái
gì đó như trong khi địa chỉ cuối cùng gắn dấu sao bởi vì chúng tôi
phải hủy tham chiếu nó không
bằng dấu gạch chéo ngược số 0 có thể làm điều gì đó
như vậy, nhưng đó là loại mã rất nhiều. Tất cả những gì chúng ta thực sự cần
làm chỉ là nói trong khi
gắn dấu sao ở địa chỉ cuối cùng. Bởi vì nếu bạn
bỏ qua một dấu chấm hết rỗng,
nó sẽ bằng 0 và 0 bằng false.
Chúng ta biết rằng Booleans có một là true, zero là false.
Vì vậy, nếu nó sai, nó sẽ nhảy ra ngoài. Vì vậy, tất cả những gì bạn
cần làm là bên trong điều kiện while của bạn được đặt dấu sao địa chỉ cuối cùng.
Một lần nữa, điều này sẽ bỏ qua con trỏ.
Và một khi nó trỏ đến địa chỉ cuối cùng, nó sẽ trỏ đến dấu chấm dứt rỗng.
Bây giờ chúng ta phải đảm bảo rằng chúng ta sửa đổi địa chỉ cuối cùng, để cuối cùng trỏ đến dấu chấm dứt null.
Ở đây tất cả những gì chúng ta có thể làm là chúng ta có thể nói cộng với địa chỉ cuối cùng.
Vì vậy, mỗi lần lặp lại vòng lặp while này sẽ tăng địa chỉ cho đến khi
nó nhìn thấy số 0.
Số 0 đại diện cho dấu chấm hết rỗng.
Vì vậy, kết quả cuối cùng của sau khi vòng lặp while
này được thực thi xong, địa chỉ cuối cùng sẽ được trỏ đến địa chỉ của dấu chấm dứt null.
Sau đó, chúng ta có thể trừ địa chỉ của dấu chấm dứt null từ địa chỉ đã
được chuyển vào, chuỗi của chúng ta, và điều đó sẽ cung cấp cho chúng ta độ dài của chúng ta.
Vì vậy, đó là tất cả những gì chúng ta phải làm ở dòng tiếp theo. Chúng tôi chỉ có thể nói trả lại địa
chỉ cuối cùng của chúng tôi và
chúng tôi thực sự muốn trừ địa chỉ,
vì vậy chúng tôi không cần phải hủy tham chiếu bất kỳ thứ gì hoặc sử
dụng toán tử chuyển hướng, địa chỉ cuối cùng trừ chuỗi. Vì vậy, chuỗi được chuyển vào, chúng
tôi không sửa đổi nó chút nào.
Đó là trỏ đến ký tự đầu tiên. Điều đó sẽ chỉ đến j.
Đó sẽ là địa chỉ hoặc lần đầu tiên chúng tôi gọi trong dòng thứ tám, đó sẽ là địa chỉ của s.
Địa chỉ cuối cùng sẽ được chỉ đến địa chỉ của t cuối cùng này.
Trên thực tế, hơn thế nữa, dấu chấm hết null. Nếu chúng ta nói địa chỉ cuối cùng
trừ đi địa chỉ của s, nó sẽ cho chúng ta độ dài.
Và đó là những gì chúng tôi sẽ trở lại.
Vì vậy, tôi hy vọng điều đó có ý nghĩa.
Một lần nữa, trên dòng 17, chúng ta đang tạo một biến cục
bộ vì chúng ta cần theo dõi địa chỉ cuối cùng, địa chỉ của
dấu chấm dứt null.
Sau khi vòng lặp while này chạy xong, địa chỉ cuối cùng sẽ trỏ đến
sau dấu t, dấu chấm dứt rỗng.
Sau đó, chúng tôi chỉ có thể trừ địa chỉ cuối cùng khỏi chuỗi, địa chỉ của chuỗi
được trỏ đến s khi nó xuất hiện, chúng tôi không sửa đổi điều đó.
Vì vậy, hãy xem điều gì sẽ xảy ra nếu điều này trả lại cho chúng ta độ dài chính xác.
Khi chúng tôi chạy điều này, chúng tôi sẽ thấy độ dài cho những chuỗi mà chúng tôi đã chuyển vào.
Vì vậy, chúng ta thấy 17 0 và 5.
Hãy xem 1 2 3 4 5 6 7 8 9
10 11 12 13, bạn phải đếm không gian, 14
15 16 17. Đúng vậy, chúng tôi
đặt trong dấu ngoặc kép trống, vì vậy nó phải là 0 và sau
đó Jason phải là 5 nên 17 0 và 5, điều đó chính xác.
Vì vậy, những gì chúng tôi đã làm ở đây là
chúng tôi sử dụng số học con trỏ để lấy địa chỉ cuối cùng cộng
với toán tử tăng dần, sau đó trỏ số
học của chúng tôi để lấy độ dài bằng cách giảm thiểu địa chỉ cuối cùng trừ đi chuỗi.
Khá gọn gàng. Tôi đang cố gắng chứng minh sức mạnh
của số học điểm, sự tiện lợi về mặt ký hiệu của nó.
Làm thế nào bạn có thể dễ dàng tăng, giảm
để đi đến các vị trí khác nhau trong một mảng
ký tự và lấy các ký tự ra. Trong trường hợp này, chúng tôi chỉ lấy các địa chỉ và
sau đó sử dụng các địa chỉ để trừ nhau để có độ dài.
Vì vậy, tôi hy vọng điều này là hữu ích. Hãy chắc chắn rằng bạn hiểu tất cả những gì tôi vừa đề cập.
Một lần nữa, khái niệm hằng số, khái niệm cộng cộng, khái niệm điều kiện nếu bạn bỏ
qua một địa chỉ và nó trỏ đến một kết thúc
rỗng thì nó là một số không nên nó nhảy ra sau đó, và sau đó là khái niệm
này về việc loại bỏ hai địa chỉ. Cảm ơn bạn.