Другие языки программирования и технологии

вопрост про указатели в delphi

Допустим есть экземпляр объекта TImage - QWImage, то какая из нижеперечисленных процедур будет работать быстрее? 1. Windows.Setpixel(QWImage.Canvas.Handle, 5,6, clBlue); или 2. Windows.Setpixel(^QWImage.Canvas.Handle, 5,6, clBlue);
SK
Stanislav Korepanov
1 006
Первый. Когда ты пишешь QWImage ты на самом деле и передаешь указатель на экземпляр класса Timage.

Второй случай по идее вообще не должен компилироваться. Знак рызыменования указателя нужно было поставить QWImage^. Только это все равно компилятор не пропустит..
Александр Заворохин
Александр Заворохин
24 293
Лучший ответ
Одномайственно абсолютно.
Stanislav Korepanov вы уверены?
Вторая)
Валера Волков
Валера Волков
17 177
Stanislav Korepanov Точно-точно?
Та, что с указателем, НО я не знаю синтаксиса, а ваше объявление похоже на разименование.
Вобще суть в чём: если ты посылаешь переменную, она помещается в стэк, потом обрабатывается и возвращается из стэка. А если кидаешь указатель, то функция сразу начинает его обрабатывать, без лишней возни.

int f(int a); - медленно.
int f(register int a); - быстрее.
int f(int *a); -очень быстро.
int f(register int *a); - быстрее не бывает.

Хотя всё зависит от функции и ситуации :)

О разыменовании.
int *a; //a будет равно NULL т. е. 0
a = (int*)malloc(sizeof(int)); //Память выделена и а содержит нечто в диапазоне от 1 до 32 во второй. например 0x1F.- адрес ячейки.
a = 10; //Поменяется адрес ячейки памяти, а не значение.
*a = 10; //Теперь поменяется значение. * - оператор разименования в С++. А в паскале и дельфи (афаик) - ^.

Это стоит запомнить и ещё рекомендую это всё попрактиковать в С++.
Ознакомьтесь с теорией и фрхетектурой, такие вопросы отпадут.
Толян Lyg
Толян Lyg
9 740
Stanislav Korepanov Благодарю за подробный ответ!
Александр Ермаков А ты не подумал, что int занимает 4 байта и указатель занимает 4 байта?