Đây có phải là hình thức phức tạp hóa một mảng thành tất cả các số 0 không
char myarray[ARRAY_SIZE] = {0}
được hỗ trợ bởi tất cả các trình biên dịch? ,
nếu vậy, có cú pháp tương tự với các loại khác? ví dụ
bool myBoolArray[ARRAY_SIZE] = {false}
Đây có phải là hình thức phức tạp hóa một mảng thành tất cả các số 0 không
char myarray[ARRAY_SIZE] = {0}
được hỗ trợ bởi tất cả các trình biên dịch? ,
nếu vậy, có cú pháp tương tự với các loại khác? ví dụ
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };
sẽ được đặt a[3]..a[9]
thành 0
, ("được khởi tạo ngầm giống như các đối tượng có thời lượng lưu trữ tĩnh"). Điều này có đúng với C ++ không?
false
không giống như 0
, nhưng trong {0}
số 0 được chuyển đổi thành false
, và trong (đối với C ++), {}
bạn thậm chí không phải quan tâm đến các chuyển đổi: Nó được khởi tạo thành false
hoặc 0
hoặc null-pointer hoặc bất kỳ mặc định phân biệt kiểu nào khác.
Câu trả lời:
Có, hình thức khởi tạo này được hỗ trợ bởi tất cả các trình biên dịch C ++. Nó là một phần của ngôn ngữ C ++. Trên thực tế, nó là một thành ngữ đến từ C ++ từ ngôn ngữ C. Trong ngôn ngữ C = { 0 }
là một bộ khởi tạo số 0 phổ biến . Đây cũng là trường hợp gần như đúng trong C ++.
Vì initalizer này là phổ quát, đối với bool
mảng, bạn không thực sự cần một "cú pháp" khác. 0
cũng hoạt động như một trình khởi tạo cho bool
loại, vì vậy
bool myBoolArray[ARRAY_SIZE] = { 0 };
được đảm bảo khởi tạo toàn bộ mảng với false
. Cũng như
char* myPtrArray[ARRAY_SIZE] = { 0 };
trong đảm bảo khởi tạo toàn bộ mảng với kiểu con trỏ null char *
.
Nếu bạn tin rằng nó cải thiện khả năng đọc, bạn chắc chắn có thể sử dụng
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
nhưng vấn đề là = { 0 }
biến thể cung cấp cho bạn một cách chính xác kết quả tương tự.
Tuy nhiên, trong C ++ = { 0 }
có thể không hoạt động với tất cả các kiểu, ví dụ như kiểu enum, không thể khởi tạo bằng tích phân 0
. Nhưng C ++ hỗ trợ dạng ngắn hơn
T myArray[ARRAY_SIZE] = {};
tức là chỉ là một cặp trống của {}
. Điều này sẽ khởi tạo mặc định một mảng thuộc bất kỳ kiểu nào (giả sử các phần tử cho phép khởi tạo mặc định), có nghĩa là đối với các kiểu cơ bản (vô hướng), toàn bộ mảng sẽ được khởi tạo bằng 0 đúng cách.
bool myBoolArray[ARRAY_SIZE] = { false };
mảng thì tất cả đều được khởi tạo thành false, nhưng nếu tôi viết bool myBoolArray[ARRAY_SIZE] = { true };
chỉ phần tử đầu tiên được đặt thành true, trong khi mọi thứ khác là false. Bất kỳ lời giải thích?
bool
mảng, phần còn lại được khởi tạo bằng 0 đối với bạn. Nó là như vậy.
bool myBoolArray[ARRAY_SIZE];
, mảng chứa các giá trị ngẫu nhiên một cách chính xác, do đó tôi sẽ không mong đợi rằng một lần khởi tạo có thể trả về một mảng có các giá trị khác nhau trong đó. Đó là tất cả.
Có, tôi tin rằng nó sẽ hoạt động và nó cũng có thể được áp dụng cho các loại dữ liệu khác.
Đối với mảng lớp, nếu có ít mục trong danh sách bộ khởi tạo hơn các phần tử trong mảng, thì hàm tạo mặc định sẽ được sử dụng cho các phần tử còn lại. Nếu không có phương thức khởi tạo mặc định nào được xác định cho lớp, thì danh sách bộ khởi tạo phải đầy đủ - nghĩa là phải có một bộ khởi tạo cho mỗi phần tử trong mảng.
Bạn có thể khai báo mảng trong C ++ theo những cách này. Nếu bạn biết kích thước mảng thì bạn nên khai báo mảng cho: integer: int myArray[array_size];
Double: double myArray[array_size];
Char và string: char myStringArray[array_size];
Sự khác biệt giữa char và string như sau
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
Nếu bạn không biết kích thước của mảng thì bạn nên để mảng trống như sau.
số nguyên: int myArray[array_size];
Gấp đôi: double myArray[array_size];
false
cũng giống như0
(nếu khôngif(false)
sẽ không đánh giá là sai), vì vậy những gì bạn có có thể sẽ hoạt động trên 99% trình biên dịch. Không thể chắc chắn về 1% còn lại cho đến khi chúng tôi trích dẫn tiêu chuẩn.