Chỉ cần nhắc lại những gì Jens đã nói, {0}
hoạt động đối với mọi loại. Nó là "bộ khởi tạo không phổ dụng" trong C. Xem bản nháp C11, 6.7.9 Initialization.
Vì vậy, để khởi tạo một mảng 3D, {0}
hoặc {{{0}}}
có thể được sử dụng. Cá nhân tôi muốn sử dụng {0}
vì nó dễ dàng hơn để nhập và đọc và hoạt động cho mọi loại. Điều đó có nghĩa, các đều khởi tạo giá trị sau:
int main(void)
{
int x = {0,};
int *p = {0,};
int *q = {0};
int arr[3][3][3][3] = {0};
}
Quan trọng hơn, nếu bạn tình cờ có một số chưa biết/loại đục, ví dụ từ một thư viện của bên thứ ba, sau đó chỉ cách cầm tay để khởi tạo chúng là sử dụng {0}
. Bất kỳ cách nào khác để không sử dụng nó (chẳng hạn như sử dụng memset()
hoặc trực tiếp some_type_t state = 0;
) sẽ yêu cầu một số kiến thức nội bộ về loại có liên quan và rủi ro không phải là di động.
Nguồn
2016-11-14 14:43:36
[Khởi tạo toàn bộ mảng 2D với một giá trị] (http://stackoverflow.com/questions/15520880/initializing-entire-2d-array-with-one-value) nên trả lời tại sao '{0}' hoạt động. – Lundin