![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прикол какой-то [D7, WinXP]
Shnabs © (2004-12-28 19:34:00)Привет.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=i+1;
form1.Caption:=inttostr(i);
end;
Поидее при каждом нажатии кнопки капшн формы должен увеличиваться? А он увеличивается только если переменная i объявляется глобальной. А так капшн равен '9188949'. Почему?
DiamondShark (2004-12-29 11:10:00) [1]А... эээ... Это, видимо, вывод для интеллекта явно выше среднего.
"Ниччо не понимаю" (ц)
Sandman25 (2004-12-29 10:58:00) [2][17] DiamondShark © (29.12.04 10:55)
Логично. Хотя можно сделать и другой вывод - происходит "ошибка" при записи в стек :)
DiamondShark (2004-12-29 10:55:00) [3]
> И даже если убрать оптимизацию, всё равно число будет одно
> и то же, несмотря на изменение команды на inc dword ptr
> [ebp-$08]
Ну правильно. Программа крутится в регулярном цикле.
Соответсвенно, и мусор в стеке довольно регулярный.
;)
Sandman25 (2004-12-29 10:26:00) [4]И даже если убрать оптимизацию, всё равно число будет одно и то же, несмотря на изменение команды на inc dword ptr [ebp-$08]
Sandman25 (2004-12-29 10:24:00) [5][14] Profi © (28.12.04 21:07)
Ситуация еще более интересная - при каждом нажатии кнопки выводится одно и то же число. Потому что inc(i) транслируется в inc(esi)
Profi (2004-12-28 21:07:00) [6]Не, ну бывает! Не понимает парень, что он при каждом нажатии иницилицирует i заново, а следовательно в ней лежит мусор (любое число). Он его еще и увеличивает на 1. Ну не может он этого понять :)
begin...end (2004-12-28 21:06:00) [7]> Shnabs (28.12.04 19:34)
Вот отрывок из справки:
If you don't explicitly initialize a global variable, the compiler initializes it to 0. Local variables, in contrast, cannot be initialized in their declarations and contain random data until a value is assigned to them.
Перевод.Если Вы не инициализируете явно глобальную переменную, компилятор инициализирует её в 0. Локальные переменные, наоборот, не могут быть инициализированы в своих объявлениях и содержат случайные данные до тех пор, пока им не будут присвоены значения.
Poirot (2004-12-28 20:51:00) [8]а потом скажет, что он реальный программер:) И нас тут буит буквально уличать во всём, в чём только можно:))
Совет на скорую руку: Книжка дельфи для чайников, но лучше всего - Паскаль для "оочень сильно начинающих:))"
Sun bittern (2004-12-28 20:48:00) [9]Злые вы все. Опять над новичками стебаеетесь :)
xxxxxxx (2004-12-28 19:53:00) [10]Удалено модератором
Fay (2004-12-28 19:52:00) [11]2 xxxxxxx (28.12.04 19:50) [8]
Ну не обратил внимания 8) Эта ветка не располагает к серьёзности.
xxxxxxx (2004-12-28 19:50:00) [12]>Tag := Tag + 1;
>form1.Caption:=inttostr(i);
это что еще один бред?
тогда уж inttostr(tag)
и что здесь Tag полноценно заменила i :))))
Poirot (2004-12-28 19:49:00) [13]Развод:))))))) это чистый развод:))
Poirot (2004-12-28 19:48:00) [14]точно.. оно так и буит в капшене:)
>>Tag := Tag + 1;
>>form1.Caption:=inttostr(i);
Shnabs (2004-12-28 19:47:00) [15]Ну, а почему же тогда:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=1;
form1.Caption:=inttostr(i);
end;
капшн равен '1'.
Fay (2004-12-28 19:46:00) [16]>> А он увеличивается только если переменная i объявляется глобальной
Tag := Tag + 1;
form1.Caption:=inttostr(i);
Poirot (2004-12-28 19:44:00) [17]Орешник:)))
Не.. ну вообще-то переменная увеличивается:)))
только не так, как задумывалось;)
xxxxxxx (2004-12-28 19:42:00) [18]почему, а по кочену :)
по какой он идее должен увеличиваться, если переменная локальная.
и кто иницилицировать i будет? вот и лежит там мусор.
еще не понятно? :)
Fay (2004-12-28 19:40:00) [19]Действительно, очень странно! 8)
>> А так капшн равен '9188949'
А чему должен быть равен?