Video: Bài tập struct Phân số C++ 2025
Nếu bạn có một mảng và bạn không muốn nội dung của nó thay đổi, bạn có thể làm cho nó một mảng liên tục. Các dòng mã sau, được tìm thấy trong ví dụ Array05, thể hiện cách tiếp cận này:
const int Permanent [5] = {1, 2, 3, 4, 5}; cout << permanent [1] << endl;
Mảng này hoạt động như bất kỳ mảng nào khác, ngoại trừ bạn không thể thay đổi các số bên trong nó. Nếu bạn thêm một dòng như dòng sau, bạn sẽ có được một lỗi biên dịch, bởi vì trình biên dịch là nhận thức của các hằng số:
Thường trực [2] = 5;
Đây là lỗi bạn nhận được khi bạn thử mã này trong Mã:: Blocks:
error: chỉ định vị trí chỉ đọc 'Permanent [2]'
Còn một mảng không liên tục? Bạn có thể làm điều đó? Vâng, đôi khi - tùy thuộc vào trình biên dịch. Như khủng khiếp như các mã sau đây (tìm thấy trong ví dụ Array06) trông - và nó không phải là tiêu chuẩn ANSI! - bạn được phép làm điều này với các phiên bản cũ của trình biên dịch gcc. (Microsoft Visual C ++ và Borland C ++ Builder không cho phép nó, và trình biên dịch Code:: Blocks trình bày với bạn lỗi: thông báo lỗi mảng không hợp lệ.)
int NonConstant [5] = {1, 2, 3, 4, 5}; int OtherList [5] = {10, 11, 12, 13, 14}; KhácList = NonConstant;
Nói cách khác, dòng thứ ba nói rằng, "Hãy quên đi những điểm khác của điểm khác; thay vào đó, làm cho nó trỏ đến mảng đầu tiên, {1, 2, 3, 4, 5}! "Bây giờ, bạn thực sự không nên viết mã như thế này (nhớ, giữ mọi thứ đơn giản và dễ hiểu), vì vậy nếu bạn muốn ngăn chặn điều này, bạn có thể tạo mảng liên tục:
< ! - 3 ->const int NonConstant [5] = {1, 2, 3, 4, 5}; const int OtherList [5] = {10, 11, 12, 13, 14}; KhácList = NonConstant;
Bây giờ, khi trình biên dịch đạt đến dòng thứ ba, nó sẽ cho bạn một lỗi:
lỗi: chỉ định biến read-only 'OtherList'
Nhưng bạn có thể nhận thấy rằng cách bạn thực hiện mảng là hằng giống như cách mà bạn đã làm cho các phần tử của nó liên tục trong đoạn code đã xuất hiện ngay trước ví dụ này. Rất tiếc! Tất cả những điều đó là gì? Hóa ra có một số quy tắc.
Danh sách sau đây mô tả các quy tắc, cụ thể, để tạo mảng liên tục:
-
Nếu bạn muốn tạo một mảng liên tục, bạn có thể đặt trước nó với từ const. Khi bạn làm như vậy, tên mảng là hằng số, và các phần tử bên trong mảng là hằng số cũng . Vì vậy bạn không thể có một mảng liên tục với các phần tử không ổn định, và bạn cũng không thể có mảng không chính xác với các phần tử liên tục.
-
Quan niệm của một mảng không chính xác chỉ tồn tại trong gcc và không phải là tiêu chuẩn ANSI.
Nếu bạn thực sự muốn có được kỹ thuật, tiêu chuẩn ANSI C + + nói rằng khi bạn đặt từ const ở phía trước của một khai báo mảng, bạn không phải làm cho mảng không đổi; bạn đang nói rằng mảng chỉ giữ các hằng số.
Tuy nhiên, khi bạn sử dụng const theo cách này, hầu hết các trình biên dịch cũng làm cho mảng đó liên tục. Nhưng đó là tốt; mọi người không nên lấy một tên mảng và sao chép nó vào cái gì khác. Đó không phải là phong cách lập trình tốt, và nó chỉ yêu cầu cho lỗi - hoặc, ít nhất là sự nhầm lẫn - sau đó.