Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
ВнизУказатели Найти похожие ветки
← →
allucard (2007-04-24 09:11) [0]Доброго дня.
Ув. мастера, прочитал тему по указателям, появилось пару вопросов, помогите разобраться:
1. Адрес чего я получаю в строке 1.
2. Адрес чего я получаю в строке 2.
3. Что я получаю в строке 7?
4. Почему компилятор пропускает строкуIntToHex(Integer(P1^),8)
, аIntToHex(Integer(Button1^),8)
не пропускает?
ListBox1.Items.Add (IntToHex(Integer(Button1),8)); //строка 1
ListBox1.Items.Add (IntToHex(Integer(@Button1),8)); // строка 2
ListBox1.Items.Add (IntToHex(Integer((@Button1)^),8)); //строка 3
P1 := Button1;//строка 4
ListBox1.Items.Add (IntToHex(Integer(P1),8); //строка 5
ListBox1.Items.Add (IntToHex(Integer(@P1),8); //строка 6
ListBox1.Items.Add (IntToHex(Integer(P1^),8); //строка 7
Спасибо.
← →
allucard (2007-04-24 09:15) [1]Строка 1 полагаю адрес данных этой переменной, т.е. непосредственно данные.
Строка 6 похожа на адрес в стеке, но почему?
← →
homm © (2007-04-24 09:20) [2]> Строка 6 похожа на адрес в стеке, но почему
Что такое P1?
← →
homm © (2007-04-24 09:21) [3]Ты бы кстати строки то пронумеровал бы, а то строка 6 похожа на перевод строки :)
← →
Сергей М. © (2007-04-24 09:34) [4]
> allucard
Типы идентификаторов Button1 и P1 ?
Это же крайне важно)
← →
allucard (2007-04-24 09:36) [5]Упростим вопросы:
1. Адрес чего я получаю @Button1 или @P1?
2. Что я получаю после:
P1 := Button1;
Integer(P1^)?
3. Почему компилятор пропускает строку (P1^), а Integer(Button1^) не пропускает?
P1:типа Pointer;
Спасибо.
← →
Сергей М. © (2007-04-24 09:41) [6]
> 1. Адрес чего я получаю @Button1 или @P1?
Адрес переменной (или поля объекта).
> 2. Что я получаю после:
> 3. Почему
Тип Button1 ?
← →
homm © (2007-04-24 09:43) [7]> 3. Почему компилятор пропускает строку (P1^), а Integer(Button1^)
> не пропускает?
Видимо потому что P1^ — указатель на данные, не имеющие типа, их можно интерпретировать как угодно, а Button1^ — указатель на экземпляр класса, иеющий свой размер, и не приводимый к 4-м байтам. вот так приводит: Integer(pointer(Button1)^) ?
← →
Сергей М. © (2007-04-24 09:46) [8]Если Button1 - переменная (или поле объекта), имеющая классовый тип, то
PInteger(Button)^
← →
palva © (2007-04-24 09:54) [9]1. Адрес области, где хранятся данные объекта Button1
2. Адрес объекта Button1
3. То, на что указывает указатель P1, приведенное к типу Integer
4. Потому что P1 является указателем, а Button1 не является.
← →
allucard (2007-04-24 10:07) [10]
> Сергей М. © (24.04.07 09:41) [6]
P1, P2 тип Pointer;
Button1 обычная кнопка.
Сделав например так:
P1 := @Button1;
P2 := @P1;
Button := @P2;
Я получаю указатели на указатели?
Прикольно что P1 хранятся в стековых адресах 0012F624.
А указатель на Button1 и сам Button1 хранятся рядом 008D363C и 008D2128 что это за адреса?
Ведь обычные адреса хранятся в дампе 004263E8 например.
А как с полями обьекта работать, имея только его адрес,
и чтоб компилятор пропустил?)
← →
Сергей М. © (2007-04-24 10:11) [11]
> Я получаю указатели на указатели?
Да.
> Прикольно что P1 хранятся в стековых адресах
Что ж в том "прикольного" ?
> указатель на Button1 и сам Button1 хранятся рядом 008D363C
> и 008D2128 что это за адреса?
Судя по значениям, это области памяти, распределенной динамически.
> обычные адреса хранятся в дампе 004263E8 например
А это уже область памяти, распределенная статически.
> А как с полями обьекта работать, имея только его адрес
Что значит "работать" ?
Сформулируй конкретную задачу...
← →
clickmaker © (2007-04-24 10:16) [12]
> А как с полями обьекта работать, имея только его адрес
если известны размеры полей, то по смещению
+ надо учесть выравнивание, если структура не packed
← →
allucard (2007-04-24 10:25) [13]
> Сергей М. © (24.04.07 10:11) [11]
Спасиб, если продолжать в таком духе, можно понять как работает компилятор :)
Что значит "работать" ?
Сформулируй конкретную задачу...
Например есть адрес какой-то кнопки - задача: "нажать".
Или есть адрес TEdit"a - ввести в его поле Caption текст.
← →
clickmaker © (2007-04-24 10:30) [14]
> есть адрес какой-то кнопки - задача: "нажать".
TButton(Address).Click;
TEdit(Address).Text :=
← →
allucard (2007-04-24 10:34) [15]
> clickmaker © (24.04.07 10:30) [14]
Как всё просто :о)
А можно ведь и подменить адреса переменных:)
a := 1;
b := 2;
c := @b;
@b := @a;
@a := c;
← →
Сергей М. © (2007-04-24 10:37) [16]
> можно ведь и подменить адреса переменных
С дуру можно и ... сломать)
← →
clickmaker © (2007-04-24 10:38) [17]
> подменить адреса переменных
это ты к чему?
← →
allucard (2007-04-24 10:41) [18]
> clickmaker © (24.04.07 10:38) [17]
ну в моём примере allucard (24.04.07 10:34) [15]
что введёшь в переменную a, введётся в переменную b?
я прав?
> Сергей М. © (24.04.07 10:37) [16]
)))
← →
clickmaker © (2007-04-24 10:45) [19]
> [18] allucard (24.04.07 10:41)
ну начнем с того, что компилятор твой пример не пропустит...
и какой глубокий смысл-то в этом?
← →
Mikola Paganini (2007-04-24 11:02) [20]2 homm:
>Ты бы кстати строки то пронумеровал бы, а то строка 6 похожа на перевод строки :)
Ty slepoj???
← →
allucard (2007-04-24 14:48) [21]
> clickmaker © (24.04.07 10:45) [19]
ну, можно же обмануть :)
← →
Сергей М. © (2007-04-24 14:54) [22]
> можно же обмануть
Кто, кого и почему собрался "обманывать" - вот в чем вопрос)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.049 c