Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Прикол какой-то   Найти похожие ветки 

 
Shnabs   (2004-12-28 19:34) [0]

Привет.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=i+1;
form1.Caption:=inttostr(i);
end;
Поидее при каждом нажатии кнопки капшн формы должен увеличиваться? А он увеличивается только если переменная i объявляется глобальной. А так капшн равен "9188949". Почему?


 
Fay ©   (2004-12-28 19:40) [1]

Действительно, очень странно! 8)
>> А так капшн равен "9188949"
А чему должен быть равен?


 
xxxxxxx   (2004-12-28 19:42) [2]

почему, а по кочену :)
по какой он идее должен увеличиваться, если переменная локальная.
и кто иницилицировать i будет? вот и лежит там мусор.
еще не понятно? :)


 
Poirot ©   (2004-12-28 19:44) [3]

Орешник:)))
Не.. ну вообще-то переменная увеличивается:)))
только не так, как задумывалось;)


 
Fay ©   (2004-12-28 19:46) [4]

>> А он увеличивается только если переменная i объявляется глобальной
Tag := Tag + 1;
form1.Caption:=inttostr(i);


 
Shnabs   (2004-12-28 19:47) [5]

Ну, а почему же тогда:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=1;
form1.Caption:=inttostr(i);
end;
капшн равен "1".


 
Poirot ©   (2004-12-28 19:48) [6]

точно.. оно так и буит в капшене:)
>>Tag := Tag + 1;
>>form1.Caption:=inttostr(i);


 
Poirot ©   (2004-12-28 19:49) [7]

Развод:))))))) это чистый развод:))


 
xxxxxxx   (2004-12-28 19:50) [8]

>Tag := Tag + 1;
>form1.Caption:=inttostr(i);
это что еще один бред?
тогда уж inttostr(tag)
и что здесь Tag полноценно заменила i :))))


 
Fay ©   (2004-12-28 19:52) [9]

2 xxxxxxx   (28.12.04 19:50) [8]
Ну не обратил внимания 8) Эта ветка не располагает к серьёзности.


 
xxxxxxx   (2004-12-28 19:53) [10]

Удалено модератором


 
Sun bittern ©   (2004-12-28 20:48) [11]

Злые вы все. Опять над новичками стебаеетесь :)


 
Poirot ©   (2004-12-28 20:51) [12]

а потом скажет, что он реальный программер:) И нас тут буит буквально уличать во всём, в чём только можно:))
Совет на скорую руку: Книжка дельфи для чайников, но лучше всего - Паскаль для "оочень сильно начинающих:))"


 
begin...end ©   (2004-12-28 21:06) [13]

> 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. Локальные переменные, наоборот, не могут быть инициализированы в своих объявлениях и содержат случайные данные до тех пор, пока им не будут присвоены значения.


 
Profi ©   (2004-12-28 21:07) [14]

Не, ну бывает! Не понимает парень, что он при каждом нажатии иницилицирует i заново, а следовательно в ней лежит мусор (любое число). Он его еще и увеличивает на 1. Ну не может он этого понять :)


 
Sandman25 ©   (2004-12-29 10:24) [15]

[14] Profi ©   (28.12.04 21:07)

Ситуация еще более интересная - при каждом нажатии кнопки выводится одно и то же число. Потому что inc(i) транслируется в inc(esi)


 
Sandman25 ©   (2004-12-29 10:26) [16]

И даже если убрать оптимизацию, всё равно число будет одно и то же, несмотря на изменение команды на inc dword ptr [ebp-$08]


 
DiamondShark ©   (2004-12-29 10:55) [17]


> И даже если убрать оптимизацию, всё равно число будет одно
> и то же, несмотря на изменение команды на inc dword ptr
> [ebp-$08]

Ну правильно. Программа крутится в регулярном цикле.
Соответсвенно, и мусор в стеке довольно регулярный.
;)


 
Sandman25 ©   (2004-12-29 10:58) [18]

[17] DiamondShark ©   (29.12.04 10:55)

Логично. Хотя можно сделать и другой вывод - происходит "ошибка" при записи в стек :)


 
DiamondShark ©   (2004-12-29 11:10) [19]

А... эээ... Это, видимо, вывод для интеллекта явно выше среднего.
"Ниччо не понимаю" (ц)



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.062 c
1-1104652605
Cheguevara
2005-01-02 10:56
2005.01.16
Как отменить последнее действие над картинкой


4-1101613952
Yus
2004-11-28 06:52
2005.01.16
Запуск прогпаммы из памяти.


1-1104818366
Глупый_Чайник:(
2005-01-04 08:59
2005.01.16
Вывести Реал в Стринг


9-1096272516
Werwolf
2004-09-27 12:08
2005.01.16
Вопрос ко всем игроделам


14-1103953244
DelphiN!
2004-12-25 08:40
2005.01.16
Отладка DLL в Delphi 6, в Windows 2003 standart