Другие языки программирования и технологии
вопрост про указатели в delphi
Допустим есть экземпляр объекта TImage - QWImage, то какая из нижеперечисленных процедур будет работать быстрее? 1. Windows.Setpixel(QWImage.Canvas.Handle, 5,6, clBlue); или 2. Windows.Setpixel(^QWImage.Canvas.Handle, 5,6, clBlue);
Первый. Когда ты пишешь QWImage ты на самом деле и передаешь указатель на экземпляр класса Timage.
Второй случай по идее вообще не должен компилироваться. Знак рызыменования указателя нужно было поставить QWImage^. Только это все равно компилятор не пропустит..
Второй случай по идее вообще не должен компилироваться. Знак рызыменования указателя нужно было поставить QWImage^. Только это все равно компилятор не пропустит..
Одномайственно абсолютно.
Stanislav Korepanov
вы уверены?
Вторая)
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; //Теперь поменяется значение. * - оператор разименования в С++. А в паскале и дельфи (афаик) - ^.
Это стоит запомнить и ещё рекомендую это всё попрактиковать в С++.
Ознакомьтесь с теорией и фрхетектурой, такие вопросы отпадут.
Вобще суть в чём: если ты посылаешь переменную, она помещается в стэк, потом обрабатывается и возвращается из стэка. А если кидаешь указатель, то функция сразу начинает его обрабатывать, без лишней возни.
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; //Теперь поменяется значение. * - оператор разименования в С++. А в паскале и дельфи (афаик) - ^.
Это стоит запомнить и ещё рекомендую это всё попрактиковать в С++.
Ознакомьтесь с теорией и фрхетектурой, такие вопросы отпадут.
Stanislav Korepanov
Благодарю за подробный ответ!
Александр Ермаков
А ты не подумал, что int занимает 4 байта и указатель занимает 4 байта?
Похожие вопросы
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- Список с использованием указателей на Си
- Два вопроса про указатели в С++ внутри.
- Вопрос про указатели в С++ внутри
- СЛОЖНА! С++ Начал читать про указатели. Скопилось куча вопросов. Помогите!
- Delphi:Прочитал, что если при динамическом создании компонента если указать Name объекта, то в последующем можно ->
- С++.Обработка строк при помощи указателей.
- Инициализация массива. Указатели.
- Как разыменовать указатель в C++
- Когда стоит использовать указатели c++