Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.5 MB
Время: 0.059 c
1-1173858684
Novice
2007-03-14 10:51
2007.05.13
Интеграция своего пункта в контекстное меню Windows


15-1176394159
Yanis
2007-04-12 20:09
2007.05.13
В продолжение темы дня.


1-1173878577
Choco
2007-03-14 16:22
2007.05.13
не разрешить вставку дубрирующей записи в БД


2-1177302656
ArtemESC
2007-04-23 08:30
2007.05.13
Как получить имя сайта, имея IP-адрес?


1-1174029549
kyn66
2007-03-16 10:19
2007.05.13
Заблокировать доступ к родительской ветке ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский