2013-03-08 37 views
19

tôi nhanh chóng một mảng như thế này:Giá trị mặc định của thành viên trong một mảng là gì?

int array[] = new int[4]; 

gì là giá trị mặc định cho những bốn thành viên? Có null, 0 hoặc không tồn tại?

+3

Điều gì đã xảy ra khi bạn thử? – jrummell

+6

'mặc định (int)' hoặc 'mặc định (T)' trong đó 'T' là loại mục chứa trong mảng. –

+1

Không thể tin rằng câu hỏi này thậm chí googled với không có gì được tìm thấy trên SO trước. –

Trả lời

37

It's 0. Không thể rỗng, vì null không phải là giá trị int hợp lệ.

Từ phần 7.6.10.4 của đặc tả C# 5:

Tất cả các yếu tố của dụ mảng mới được khởi tạo giá trị mặc định của họ (§5.2).

Và từ phần 5.2:

Giá trị mặc định của một biến phụ thuộc vào kiểu của biến và được xác định như sau:

  • Đối với một biến của một giá trị kiểu , giá trị mặc định bằng giá trị được tính bởi hàm tạo mặc định của loại giá trị (§4.1.2).
  • Đối với biến của loại tham chiếu, giá trị mặc định bằng không.

Việc khởi tạo giá trị mặc định thường được thực hiện bằng cách nhờ trình quản lý bộ nhớ hoặc bộ thu gom rác khởi tạo bộ nhớ cho tất cả bit trước khi được cấp phát để sử dụng. Vì lý do này, nó là thuận tiện để sử dụng tất cả các bit-zero để đại diện cho tham chiếu null.

(Như một chi tiết thực hiện, có một số trickiness xung quanh điểm viên đạn đầu tiên. Mặc dù C# tự nó không cho phép bạn khai báo một constructor parameterless với nhiều loại giá trị, bạn thể tạo nhà xây dựng parameterless của riêng bạn với nhiều loại giá trị . trong IL tôi không tin những nhà xây dựng được gọi là trong mảng khởi tạo, nhưng họ sẽ được gọi trong một biểu thức new X() trong C# Đó là bên ngoài lĩnh vực của C# đặc tả mặc dù, thực sự)

+1

Khi tôi tải trang này, nó nói "hỏi 1 phút trước", "trả lời 59 giây trước". Bằng chứng rằng Jon Skeet thực sự là một bot? ;) –

+1

@TimGoodman: Nhìn vào tem thời gian, tôi nghĩ rằng tôi đã trả lời (ban đầu, với phiên bản ngắn gọn) 49 giây sau khi câu hỏi được hỏi. Vẫn còn chỗ để cải thiện. –

+0

@JonSkeet Bạn không nên trả lời các nhà phê bình đó. Đó là ridiculously (nhưng funny), và trong một cách nó là một lời khen .. – Lucio

4

Từ Arrays (C# Programming Guide)..:

Giá trị mặc định của các phần tử mảng số được đặt thành 0 và các phần tử tham chiếu được đặt thành rỗng.

0

Số nguyên không thể là NULL. Họ sẽ có giá trị '0'. Ngay cả khi bạn cố gắng chỉ định NULL cho một số int từ mã, bạn sẽ không thể thực hiện điều đó.

+0

Không có thứ gì như 'NULL' trong C#. –

9

Giá trị mặc định của biến được tự động khởi tạo loại T, chẳng hạn như phần tử mảng hoặc trường mẫu, giống như giá trị default(T). Đối với các kiểu tham chiếu và kiểu con trỏ, nó là null. Đối với các loại số, đó là số không thuộc loại đó. Đối với bool, nó là sai. Đối với các kiểu struct, nó là giá trị struct có tất cả các trường của nó được khởi tạo với các giá trị mặc định của chúng.

+0

Không quan tâm, không (đã) đội C# có bao giờ xem xét hoặc quan tâm một cách rõ ràng về các cấu trúc được viết bằng các ngôn ngữ khác có các nhà thầu không tham số "không mặc định" không? –

+0

@JonSkeet: Nó không bao giờ thực sự xuất hiện, không. –

Các vấn đề liên quan