Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизПрикол какой-то Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c