Это просто вниз случайно. Переменная не инициализируется. Переменная будет находиться в стеке, и если так получится, что все, что было записано последним в это место стека, равно нулю, тогда значение там будет по-прежнему равно нулю.
Локальные переменные неуправляемых типов не инициализируются. Не допускайте, чтобы совпадения, подобные приведенным выше, убеждали вас в другом.
Рассмотрим эту программу:
{$APPTYPE CONSOLE}
type
TPrices = array[0..10, 0..5] of Integer;
procedure Foo;
var
mPrices: TPrices;
begin
Writeln(mPrices[0,0]);
end;
begin
Foo;
end.
Когда я бегу на моей машине, выход:
1638012
Теперь рассмотрим эту программу:
{$APPTYPE CONSOLE}
type
TPrices = array[0..10, 0..5] of Integer;
procedure Foo;
var
mPrices: TPrices;
begin
Writeln(mPrices[0,0]);
FillChar(mPrices, SizeOf(mPrices), 0);
end;
procedure Bar;
var
mPrices: TPrices;
begin
Writeln(mPrices[0,0]);
end;
begin
Foo;
Bar;
end.
На этот раз выход :
1638012
0
Бывает так, что две функции помещают свои локальные переменные в одно и то же место и тот факт, что первый вызов функции обнулял локальную переменную перед возвратом, влияет на неинициализированное значение другой локальной переменной во второй функции.
Или попробовать эту программу:
{$APPTYPE CONSOLE}
type
TPrices = array[0..10, 0..5] of Integer;
procedure Foo;
var
mPrices: TPrices;
begin
Writeln(mPrices[0,0]);
FillChar(mPrices, SizeOf(mPrices), 0);
mPrices[0,0] := 666;
end;
procedure Bar;
var
mPrices: TPrices;
begin
Writeln(mPrices[0,0]);
Writeln(mPrices[0,1]);
end;
begin
Foo;
Bar;
end.
Теперь выход:
1638012
666
0
Как вы можете себе представить, много разных вещей может привести к содержанию этого стека пространства изменения. Так что доверься тому, что знаешь. Локальные переменные неуправляемых типов не инициализируются.
Действительно ли это обман Q @TLama? –
@ Давид, у него есть ответ. Но хорошо, например. ['this one'] (http://stackoverflow.com/q/861045/960757) лучше. Их будет больше ... [Я открою этот файл] – TLama
@TLama Этот вопрос «этот» не относится к локальным переменным в методе/процедуре, а о глобальных переменных. Мне очень нравится тот, который используется для дубликата лучше. –