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

Вниз

Указатели   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.035 c
15-1176384751
botvin
2007-04-12 17:32
2007.05.13
Менеджер памяти


15-1176287703
Knight
2007-04-11 14:35
2007.05.13
Чё-то какие-то заморочки пошли с VBA... сперва с Access теперь...


3-1172476177
Ньюбб
2007-02-26 10:49
2007.05.13
как узнать ip или dns в триггере firebird


1-1173946566
shreck
2007-03-15 11:16
2007.05.13
Как в делфях сделать то, что на С выглядит следующим образом:


2-1176714827
MVA`
2007-04-16 13:13
2007.05.13
Jpeg