2013-03-08 13 views
19

I instancji tablicę takiego:Jaka jest wartość domyślna elementu w tablicy?

int array[] = new int[4]; 

Jakie są domyślne wartości dla tych czterech członków? Czy jest zerowa, 0 czy nie istnieje?

+3

Co się stało, gdy próbowałeś? – jrummell

+6

'default (int)' lub 'default (T)' gdzie 'T' jest typem pozycji zawartej w tablicy. –

+1

Nie mogę uwierzyć, że to pytanie zostało wpisane w wyszukiwarkę Google, ale nie znaleziono niczego w SO. –

Odpowiedz

37

To 0. Nie może być pusta, ponieważ wartość null nie jest poprawną wartością int.

Z sekcji 7.6.10.4 specyfikacji C# 5:

Wszystkie elementy nowego przykład tablicy są inicjalizowane do wartości domyślnych (§5.2).

A z sekcji 5.2:

Domyślna wartość zmiennej zależy od typu zmiennej i jest ustalana w następujący sposób:

  • dla zmiennej o typie wartości , domyślna wartość jest taka sama jak wartość obliczona przez domyślny konstruktor typu wartości (§4.1.2).
  • Dla zmiennej typu referencyjnego wartość domyślna to zero.

Inicjalizacja na wartości domyślne jest zwykle wykonywana poprzez zainicjowanie pamięci przez menedżera pamięci lub garbage collector na wszystkie-bity-zero przed przydzieleniem do użycia. Z tego powodu wygodnie jest użyć wszystkich bitów-zera do reprezentowania zerowego odniesienia.

(Jako szczegółów realizacji, istnieje jakiś trickiness wokół pierwszego punktu pocisku. Chociaż C# Sama nie pozwala zadeklarować konstruktora bez parametrów dla typów wartości, to może tworzenia własnych konstruktorów bez parametrów dla typów wartości . IL nie wierzę ci konstruktorzy są nazywane w inicjalizacji tablicy, ale będzie nazwać w new X() wypowiedzi w języku C# To poza sferę C# specyfikacji chociaż, naprawdę)

+1

Po załadowaniu tej strony, napis "zapytał minutę temu", "odpowiedział 59 sekund temu". Dowód, że Jon Skeet jest naprawdę bota? ;) –

+1

@TimGoodman: Patrząc na znaczniki czasu, myślę, że odpowiedziałem (początkowo, w krótkiej wersji) 49 sekund po zadaniu pytania. Nadal można poprawić. –

+0

@JonSkeet Nie powinieneś odpowiadać tym krytykom. To niedorzecznie (ale zabawnie) iw pewnym sensie jest to komplement. – Lucio

0

Liczba całkowita nie może być NULL. Będą mieć wartość "0". Nawet jeśli spróbujesz przypisać NULL do kodu int z kodu, nie będziesz mógł tego zrobić.

+0

Nie ma czegoś takiego jak 'NULL' w języku C#. –

9

Wartość domyślna automatycznie zainicjowanej zmiennej typu T, na przykład element tablicy lub pole instancji, jest taka sama jak wartość default(T). W przypadku typów odniesienia i typów wskaźników jest to wartość pusta. W przypadku typów numerycznych jest to zero tego typu. Bool jest fałszywy. W przypadku typów struct jest to wartość struct, której wszystkie pola zostały zainicjowane na wartości domyślne.

+0

Ciekawe, czy zespół C# kiedykolwiek wyraźnie rozważał lub dba o struktury napisane w innych językach, które mają "inne niż domyślne" konstruktory bez parametrów? –

+0

@JonSkeet: Nigdy tak naprawdę nie wyskoczyło, nie. –

Powiązane problemy