Xin chào, và chào mừng trở lại. Hãy tiếp tục thảo luận về các cấu
trúc và nói về cách chúng liên quan đến mảng.
Chúng ta đã nói về cách các cấu trúc tương tự như mảng và bạn có thể lưu trữ nhiều hơn một
giá trị, nhưng chúng khác nhau vì bạn có thể có các kiểu dữ liệu khác nhau và
bạn có thể nhóm chúng theo cách đó.
Nhưng bạn cũng có thể thực sự có các mảng cấu trúc giống như vậy.
Vì vậy, bạn đã thấy cấu trúc hữu ích như thế nào và cho phép bạn nhóm các phần tử liên quan với nhau một cách
hợp lý, chúng tôi đã thấy điều đó. Chúng tôi biết cách xác định
một cấu trúc với các phần tử khác nhau bằng cách sử dụng từ khóa struct,
sử dụng tên thẻ.
Và chúng tôi cũng biết cách tạo một biến kiểu đó.
Bởi vì cấu trúc về cơ bản là một kiểu dữ liệu mới mà bạn có thể sử dụng.
Và sau đó, bạn có thể truy cập các phần tử của một cấu trúc bằng cách sử dụng toán tử lựa chọn thành viên.
Nếu bạn muốn tạo nhiều cấu trúc bên trong một
mảng thì sao. Bạn có thể làm điều đó.
Vì vậy, ví dụ, chỉ cần theo dõi một biến thay vì ba cho mỗi
ngày được chương trình sử dụng, đó là lợi thế của một cấu trúc.
Nếu chúng ta muốn xử lý 10 ngày khác nhau trong một
chương trình, chúng ta chỉ phải theo dõi 10 biến khác nhau thay vì 30.
Bởi vì hãy nhớ rằng, cấu trúc chứa ba biến bên trong của chính nó.
10 cho các biến khác nhau vẫn còn rất nhiều, vì vậy
nó thực sự không phải là cách tối ưu. Bạn có thể muốn tạo một mảng.
Bởi vì bạn có 10 kiểu giống nhau cũng giống như bạn có 10
kiểu giống nhau. Chỉ có một kiểu cấu trúc.
Vì vậy, một phương pháp tốt hơn để xử lý 10
ngày tháng khác nhau liên quan đến sự kết hợp của hai tính năng mạnh mẽ của ngôn ngữ lập
trình c, cấu trúc và mảng.
Bạn có thể sử dụng chúng cùng nhau để làm cho nó mạnh hơn nữa.
Vì vậy, hoàn toàn hợp lệ để xác định một mảng cấu trúc
Khái niệm về một mảng cấu trúc là một khái niệm rất mạnh mẽ và quan trọng trong c, vì vậy hãy chú ý.
Khai báo một mảng cấu trúc cũng giống như khai báo bất kỳ loại mảng nào khác.
Bạn chỉ định kiểu nó sẽ xảy ra đó là một kiểu cấu trúc.
Vì vậy, nếu bạn muốn tạo một mảng cấu trúc có tên
ngày, bạn sẽ nói struct date và
sau đó là tên biến và sau đó bạn sử dụng dấu ngoặc,
giống như bạn sử dụng dấu ngoặc cho các mảng khác, bạn phải chỉ định kích thước.
Vì vậy, trong trường hợp này nếu chúng tôi đang tạo 10 phiên bản hoặc 10 phần tử của kiểu
cấu trúc ngày, chúng tôi sẽ nói 10 bên trong các dấu ngoặc đó cho dấu hiệu.
Vì vậy, điều này sẽ xác định một mảng được gọi là ngày của tôi, bao gồm 10 phần tử.
Mỗi phần tử bên trong mảng được xác định một ngày struct
kiểu bf, chứa ba phần tử.
Vì vậy, về cơ bản những gì bạn đang làm là bạn đang lưu
trữ 30 bộ dữ liệu khác nhau, 30 phần tử dữ liệu khác nhau.
Để xác định các thành viên của một mảng cấu trúc, bạn
áp dụng cùng một quy tắc mà bạn sử dụng cho các cấu trúc riêng lẻ.
Bạn đặt tên cấu trúc với toán tử dấu chấm và sau đó với tên thành viên.
Tham chiếu đến một phần tử cấu trúc cụ thể bên trong mảng là khá tự nhiên.
Để đặt ngày thứ hai bên trong mảng ngày tháng của tôi thành ngày 8 tháng 8 năm 1986, tất cả
những gì bạn phải làm là chỉ định tên của mảng, ngày tháng của
tôi và bạn chỉ định chỉ mục. Chúng tôi đang chỉ định ở đây là ngày thứ hai.
Hãy nhớ rằng, mảng dựa trên 0. Vì vậy, chúng tôi nói 1, phụ 1.
Và sau đó nếu chúng ta muốn truy cập các phần tử của phần
tử mảng đó hoặc các thành viên của cấu trúc đó cho phần tử đó, chúng tôi nói dot month.
Vì vậy, điều này sẽ cung cấp cho chúng ta phần tử thứ hai trong mảng ngày tháng của tôi.
Giá trị tháng cho loại cấu trúc đó và ở đây chúng tôi sẽ gán cho nó giá trị là 8.
và sau đó nếu chúng ta muốn truy cập vào ngày, chúng ta cũng sẽ ấn
định ngày 8 vì đó là ngày 8 tháng 8. Và cuối cùng, đối với năm, chúng ta
sẽ nói năm chấm bằng 1986.
Đây là cách bạn có thể gán cho phần tử thứ hai của mảng ngày
tháng của tôi, ba biến khác nhau vì nó thuộc loại struct, date struct.
Bạn nên nhận thấy rằng nó thực sự không khác nhau.
Sự khác biệt duy nhất ở đây là bạn có một dấu chấm. Thông thường, bạn sẽ chỉ nói ngày của tôi
là phụ 1 và đó sẽ là điều đó vì bạn chỉ có thể gán một biến tùy
thuộc vào kiểu của mảng đó.
Nhưng trong trường hợp này, bạn có thể nói sub-1 với ba biến khác nhau
vì đó là ba phần tử bên trong cấu trúc.
Khởi tạo một mảng cấu trúc.
Khởi tạo mảng chứa cấu trúc tương tự như khởi
tạo mảng nhiều chiều.
Hãy nhớ rằng, với mảng nhiều chiều, chúng ta sẽ tuân theo cú pháp cụ
thể với dấu ngoặc nhọn ở bên ngoài và sau đó là dấu ngoặc nhọn ở bên trong đại diện cho mỗi hàng.
Các dấu ngoặc nhọn ở bên trong thực sự là tùy chọn,
nhưng nó làm cho nó dễ đọc hơn nhiều. Và vì vậy tôi muốn tuân theo quy ước đó.
Trong ví dụ này, chúng tôi đang tạo ngày của tôi thuộc loại cấu trúc ngày,
nó sẽ có kích thước 5. Và sau đó chúng ta sẽ chỉ khởi tạo ba phần tử đầu tiên.
Cũng giống như một mảng nhiều chiều, chúng ta có những
dấu ngoặc nhọn bên trong. Và vì vậy, phần tử đầu tiên trong mảng ngày
tháng của tôi là một chỉ số con 0. Chúng ta sẽ nói
rằng tháng là 12, ngày là 10 và năm là 1975.
Và sau đó chúng ta sẽ làm tương tự cho phần tử đầu tiên. Chúng ta sẽ nói 12 30 1980.
Và đối với yếu tố thứ ba, chúng ta sẽ nói 11 15 2005.
Và bởi vì chúng tôi không cung cấp hai phần tử khác trong
mảng ngày tháng của tôi, chúng sẽ không được khởi tạo bất kỳ thứ gì.
Vì vậy, điều này sẽ thiết lập ba ngày đầu tiên.
Trong mảng, ngày của tôi là 12
10 1975, 12 30 1980 và 11 15 2005.
Các giai đoạn bên trong của niềng răng là tùy chọn, giống như trong một khu vực đa chiều, chúng cũng là tùy chọn.
Nhưng một lần nữa nó làm cho nó dễ đọc hơn, dễ thực hiện hơn với những mắc cài mặt trong đó,
tôi xin tuân theo quy ước đó.
Vì vậy, bạn có thể làm điều này nếu
bạn muốn loại bỏ dấu ngoặc nhọn, nhưng sẽ khó làm theo hơn một chút
vì bây giờ bạn chỉ có dấu phẩy, được phân tách bằng dấu phẩy hoặc các phần tử được phân tách
bằng dấu phẩy và nó có thể rất khó hiểu nếu bạn làm nhiều những.
Bạn phải ánh xạ điều đó một cách chính xác, nói rằng tôi đang ở phần tử
thứ tư thứ tư cho dấu phẩy thứ tư của tôi, được rồi đó sẽ
là phần tử thứ hai của mảng, khó theo dõi hơn, vì vậy hãy sử dụng những dấu ngoặc nhọn bên trong.
Nếu bạn chỉ muốn khởi tạo phần tử thứ ba của mảng thành một giá trị được chỉ
định, bạn có thể chỉ định ngày của tôi là con 5.
Bạn vẫn đang tạo mảng ở đây.
Bạn vẫn đang khai báo biến và đặt kích thước thành năm.
Nhưng bên trong dấu ngoặc nhọn, bạn
đang nói hai dấu ngoặc vuông bên trong và
bạn sẽ khởi tạo từ 2 đến 12 10 1975.
Vì vậy, bạn sẽ thấy các dấu ngoặc vuông đại diện cho phần tử mà bạn
muốn khởi tạo, sau đó toán tử gán bằng và sau đó bên trong dấu
ngoặc nhọn bạn đang khởi tạo tháng, ngày và năm cho các phần
tử bên trong cấu trúc.
Vì vậy, bạn cũng có thể chỉ định chính xác phần tử bạn muốn khởi tạo.
Nếu bạn chỉ muốn đặt tháng và ngày cho phần tử thứ hai của mảng ngày tháng của tôi thành 12 và 30, bạn
có thể làm điều gì đó tương tự.
Bạn chỉ cần thực hiện một dấu phẩy để phân tách từng thuộc tính.
Bạn không muốn thực sự đặt năm vì vậy bạn muốn có thể sử dụng các dấu ngoặc nhọn đó.
Bạn có thể nói tháng chấm
bằng 12 dấu chấm phụ 1 ngày bằng 30.
Và một lần nữa cú pháp này trông rất giống với việc khởi tạo các
biến cấu trúc ở những nơi khác.
Sự khác biệt duy nhất ở đây là vì nó là một mảng, bạn phải chỉ định chỉ số
của mảng, nhưng cú pháp tương tự.
Còn về cấu trúc chứa mảng.
Các phần tử bên trong cấu trúc chứa một mảng.
Cũng có thể tìm các cấu trúc chứa một mảng như một thành viên.
Điều này có thể hữu ích.
Cách sử dụng phổ biến nhất là thiết lập một mảng các ký tự bên trong một cấu trúc.
Chúng tôi sử dụng mảng char khá đúng cho các chuỗi.
Vì vậy, sẽ rất phổ biến đối với một cấu trúc chứa một chuỗi về cơ bản,
một mảng ký tự.
Vì vậy, giả sử bạn muốn xác định một
cấu trúc được gọi là tháng chứa các thành viên của nó, số
ngày trong tháng cũng như ba ký tự viết tắt cho tên tháng.
Đó là nơi chúng ta có thể sử dụng một mảng ký tự. Chúng tôi có thể nói cấu trúc tháng.
Chúng tôi biết cách xác định một cấu trúc. Một lần nữa, đây không phải là cấp phát bất kỳ bộ nhớ nào.
Đây là cách cấu trúc được xác định. Đây là những yếu tố được chứa bên trong nó.
Ở đây chúng tôi đang sử dụng từ khóa struct. Chúng tôi nói tên của cấu trúc. Tên thẻ là tháng, và sau đó chúng
ta có dấu ngoặc nhọn bên trái và sau đó chúng ta chỉ định các phần tử.
Chúng ta có một phần tử là số nguyên đại diện cho số ngày mà chúng ta có dấu chấm phẩy ở cuối.
Và sau đó chúng ta có một mảng ký tự, tên ký
tự phụ là ba, kích thước là ba vì nó có ba ký tự.
Và sau đó chúng ta kết thúc cấu trúc bằng dấu ngoặc nhọn bên phải trong dấu chấm phẩy.
Nhưng hãy nhớ rằng, các ký tự là các mảng và chúng có liên quan chặt chẽ đến các con trỏ và chúng ta cũng biết điều đó cho đến nay.
Nhưng bạn có thể dễ dàng có các cấu trúc chứa mảng bằng cách đặt chúng
như một phần tử thành viên.
Và do đó, điều này thiết lập một cấu trúc tháng chứa
một thành viên số nguyên được gọi là số ngày và một thành viên ký tự có tên là tên.
Tên thành viên thực sự là một mảng gồm ba ký tự, khá đơn giản.
Vì vậy, làm thế nào để bạn thực sự truy cập nó. Trước tiên, bạn phải tạo biến của mình.
Biến sẽ tạo bộ nhớ cho các phần tử bên trong cấu trúc và sau đó bạn
chỉ muốn đặt các trường thích hợp bên trong biến 8 tháng, mảng ký
tự vì đó là tên của nó. Chúng tôi đã có tên
và số ngày. Ở đây nó được gọi là tên và ví dụ nó được gọi là tháng.
Vâng, một tháng là loại biến và sau đó tên là loại phần tử, vì vậy điều đó chính xác.
Vì vậy, ở đây chúng tôi tạo một cấu trúc. Nó thuộc loại tháng.
Đó là tên biến là một tháng. Chúng tôi không khởi tạo nó bằng bất cứ thứ gì.
Chúng tôi ngay lập tức đặt số ngày trong tháng là 31.
Chúng tôi sử dụng toán tử lựa chọn thành viên chấm đó.
Và sau đó chúng ta muốn gán cho mảng ký tự, chúng ta
không thể gán trực tiếp cho một mảng ký tự.
Bạn sẽ phải thực hiện một so sánh str hoặc một cái gì đó nếu bạn muốn ký tất cả mọi thứ. Và bạn có thể làm điều đó.
Bạn không cần phải sử dụng các chỉ mục này. Bạn có thể nói str sao chép
một tháng dấu chấm dấu phẩy dấu phẩy và sau đó j
a n trong dấu ngoặc kép hoặc bạn có thể làm điều này khi bạn truy cập các
phần tử của mảng thông qua chỉ mục.
Ở đây chúng ta đang nói tên dấu chấm tháng vì chúng ta phải truy cập
vào biến thành viên tên hoặc phần tử thành viên.
Và sau đó bên trong dấu ngoặc, chúng ta chỉ định chỉ số của mảng.
Chúng ta sẽ thấy nó ký ký tự đầu tiên trong mảng j, ký tự thứ hai a, ký tự thứ ba n.
Bạn sẽ thấy cú pháp này nếu bạn đang thực hiện
ints và double và float. Thông thường, khi bạn có một
mảng ký tự, bạn sẽ sử dụng chức năng sao chép str khuấy và gán mọi thứ bằng dấu ngoặc kép.
Bạn cũng có thể khởi tạo biến với các giá trị giống nhau bằng cách thực
hiện thao tác tương tự khi bạn khai báo biến. Ngay bên trong dấu ngoặc nhọn, vì nó
là một mảng, bạn có thể có bên trong dấu ngoặc
nhọn bên trong và sau đó là các dấu ngoặc kép xung quanh mỗi ký tự.
Và bạn có thể thiết lập cấu trúc 12 tháng bên trong một mảng để đại diện cho mỗi tháng trong năm.
Vì vậy, bây giờ chúng ta
có thể tạo một biến của tháng, là một mảng có kích thước 12 kiểu struct month và
có thể đại diện cho mỗi tháng.
Và sau đó cho mỗi tháng, chúng ta có thể dành số ngày và sau đó là các chữ viết tắt của tháng.
Vì vậy, việc sử dụng hai khái niệm mạnh mẽ này
về mảng và cấu trúc là rất, rất hữu ích.
Cấu trúc có thể có nhiều phần tử, vì
vậy chúng thực sự có thể là một cấu trúc của mảng và các phần
tử bên trong cấu trúc có thể là một mảng.
Và chúng ta sẽ nói chuyện tiếp theo về cách chúng ta có thể sử dụng các cấu trúc để chứa các phần tử khác như con trỏ.
Nhưng bạn sẽ thấy rằng các cấu trúc có thể lưu trữ bất kỳ loại
dữ liệu nào trong nhiều loại dữ liệu khác nhau.
Và nó rất, rất hữu ích khi sử dụng với khái niệm mảng.
Tôi hy vọng nó sẽ có ích. Một lần nữa, chúng tôi sẽ có một thử
thách để chứng minh một số khái niệm này và đưa ra một số
ví dụ bên trong các khối mã sau này. Cảm ơn bạn.