|
30.04.2008, 18:45
|
#16
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Ptr и Var : как работает ?
Global list:TList = New TList
Type TType
Field varr:int
Function create_v:TType( _param:int )
Local cre:TType = New TType
cre.varr = _param
list.AddLast(cre)
Return cre
End Function
End Type
Local obj:TType=TType.create_v( 5 )
|
(Offline)
|
|
30.04.2008, 19:06
|
#17
|
Знающий
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений (для 21 пользователей)
|
Ответ: Ptr и Var : как работает ?
О_0 /. Гы, вы меня не поняли. Мне не нужно присваивать переменной какое то значение какойто переменной, а указатель, что бы при изменении переменной-указателя менялось значение указываемой переменной. Как в случае с моим кодом...
|
(Offline)
|
|
30.04.2008, 19:10
|
#18
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Ptr и Var : как работает ?
Там ты прибовляешь к mode колличество созданных объектов..
Ы? Я туплю или ты меня завернул в салфетку..
|
(Offline)
|
|
30.04.2008, 21:13
|
#19
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Ptr и Var : как работает ?
Хочу помочь. но я ничего не понял, если честно.
|
(Offline)
|
|
01.05.2008, 18:09
|
#20
|
Знающий
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений (для 21 пользователей)
|
Ответ: Ptr и Var : как работает ?
Вот представим, имеется меню, кнопки, при нажатии определенной кнопки меняется значение глобальной переменной а переменной типа меню. Делается это указателями, то есть я не передаю значение а лишь даю понять проге какую переменную надо увеличить или уменьшить , короче не важно действия, главное суть. Вот ниже я привел пример:
Global ButtonList:TList = New TList
'varriables
Global varriable_1:Int
Global varriable_2:Int
Global varriable_3:Int
Type TButtonGUI
Field pos_x:Int, pos_y:Int
Field color:Int[4]
Field txt:String
Function Button:TButtonGUI(txt:String, pos_x:Int, pos_y:Int)
Local Button:TButtonGUI = New TButtonGUI
button.txt = txt
button.pos_x = pos_x
button.pos_y = pos_Y
button.color[1] = 0
button.color[2] = 0
button.color[3] = 128
ButtonList.AddLast(Button)
End Function
Method update(name:String, ukazatel Var)
If MouseX() >= pos_x And MouseY() >= pos_y And MouseX() <= pos_x + 250 And MouseY() <= pos_y + 70 Then
color[1] = 255
color[2] = 0
color[3] = 0
If txt = name Then
If MouseHit(1) Then
ukazatel:+1
End If
End If
Else
color[1] = 0
color[2] = 0
color[3] = 128
End If
End Method
Method draw()
SetColor(color[1] , color[2] , color[3] )
DrawRect(pos_x, pos_y, 250, 70)
SetColor(0, 0, 0)
DrawText(txt, pos_x + 125 - TextWidth(txt) *.5, pos_y + 35 - TextHeight(txt) *.5)
End Method
End Type
Function UpdateButton(txt:String, ukazatel Var)
For Local up_button:TButtonGUI = EachIn ButtonList
up_button.update(txt, ukazatel)
up_button.draw
Next
End Function
Graphics (800, 600, 0, 60, 2)
HideMouse
TButtonGUI.Button("Varriable 1", 50, 100)
TButtonGUI.Button("Varriable 2", 50, 300)
TButtonGUI.Button("Varriable 3", 50, 500)
While Not KeyHit(KEY_ESCAPE)
Cls
UpdateButton("Varriable 1", varriable_1)
UpdateButton("Varriable 2", varriable_2)
UpdateButton("Varriable 3", varriable_3)
'cursor
SetColor(255, 255, 255)
DrawOval(MouseX(), MouseY(), 4, 4)
'txt
SetColor(255, 255, 255)
DrawText("MouseX: " + MouseX(), 20, 20)
DrawText("MouseY: " + MouseY(), 20, 40)
DrawText("Varriable 1 = " + varriable_1, 600, 20)
DrawText("Varriable 2 = " + varriable_2, 600, 40)
DrawText("Varriable 3 = " + varriable_3, 600, 60)
Flip
Wend
Здесь я создал 3 кнопки, потом в упдейте дал указания какой кнопке какую переменную увеличить.
UpdateButton("Varriable 1", varriable_1)
UpdateButton("Varriable 2", varriable_2)
UpdateButton("Varriable 3", varriable_3)
Жирными буквами указаны указатели.
А нельзя ли скажем добавить в типе меню еще переменную указатель, Varriable , которая будет хранить указатель на нужную переменную, но тип филда не могу задать . Потом создание кнопок будет уже следующим:
TButtonGUI.Button("Varriable 1", 50, 100,varriable_1)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_2)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_3)
Потом исходя из того что в типе меню есть переменная указатель, то в упдейте просто увеличивается Varriable(указатель) на 1 или еще что. (смотреть метод обновления). Тогда теоретически не придеться каждый раз вызывать Упдейт с разными значениями.
Как думаете такое возможно?
Надеюсь я понятно изьяснился.
|
(Offline)
|
|
02.05.2008, 21:37
|
#21
|
Знающий
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений (для 21 пользователей)
|
Ответ: Ptr и Var : как работает ?
Я не понятно выразился или такое не возможно сделать?
|
(Offline)
|
|
02.05.2008, 21:46
|
#22
|
Бывалый
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений (для 509 пользователей)
|
Ответ: Ptr и Var : как работает ?
Объясняеш ты ППЦ как нормально.
ЗЫ ему надо хранить указатель на какуюто переменую.
__________________
Жизнь как говориться игра- делать игры моя профессия(с)
Программирование, это религия! Её нужно исповедовать.
|
(Offline)
|
|
04.05.2008, 23:45
|
#23
|
Разработчик
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений (для 95 пользователей)
|
Ответ: Ptr и Var : как работает ?
Local variable1 : Short Ptr
Local variable2 : Byte Ptr
variable2 = Byte Ptr ( variable )
перевод переменной из одного типа в другой не работает!
как быстро перевести?
|
(Offline)
|
|
05.05.2008, 00:21
|
#24
|
|
Ответ: Ptr и Var : как работает ?
drunnik
тебе это зачем вообще ?
|
|
|
05.05.2008, 00:57
|
#25
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Ptr и Var : как работает ?
ПсМ
Багратион, а тебя не устроит массив? нада будет хранить только индекс.
|
(Offline)
|
|
05.05.2008, 01:15
|
#26
|
Знающий
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений (для 21 пользователей)
|
Ответ: Ptr и Var : как работает ?
Сообщение от MoKa
ПсМ
Багратион, а тебя не устроит массив? нада будет хранить только индекс.
|
Нет, зачем это. С указателями имхо было бы круто. Но как реализовать.
|
(Offline)
|
|
05.05.2008, 04:11
|
#27
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Ptr и Var : как работает ?
Индекс на переменную - int вот тебе и указатель.
|
(Offline)
|
|
05.05.2008, 11:41
|
#28
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Ptr и Var : как работает ?
Сообщение от drunnik
Local variable1 : Short Ptr
Local variable2 : Byte Ptr
variable2 = Byte Ptr ( variable )
перевод переменной из одного типа в другой не работает!
как быстро перевести?
|
в смысле не работает? если ты byte-ом указываешь на short, то он будет разбит на 2 байта var[0] & var[1]
Local variable1 : Short Ptr
Local variable2 : Byte Ptr
Local sh:Short = $ABCD
variable1 = Short Ptr ( Varptr(sh) )
Print Hex(variable1[0]) ' ABCD
variable2 = Byte Ptr( Varptr(sh) )
Print Hex(variable2[0]) ' CD
Print Hex(variable2[1]) ' AB
Последний раз редактировалось dimanche13, 05.05.2008 в 12:02.
Причина: более внятно написал
|
(Offline)
|
|
08.05.2008, 00:12
|
#29
|
Разработчик
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений (для 95 пользователей)
|
Ответ: Ptr и Var : как работает ?
Немножко по теме.
Например у меня есть список .
Так-же есть 2 объекта :
Как первый объект поместить в список полностью ,
А на второй поместить только ссылку .
Тоже самое с переменными :
Как копировать тип в другую переменную ,
И как сделать на него только ссылку в другой переменной .
Просто постоянно путаюсь . СоВсЕм уже запутался .
|
(Offline)
|
|
08.05.2008, 11:20
|
#30
|
|
Ответ: Ptr и Var : как работает ?
я что-то тоже из темы выпадаю
local somevar:TType = new TType
somevar это же указатель на кусок памяти
local someint% = 1
someint это уже обьект
к примеру :
type TType
field test% = 1
end type
local sint% = 1
local stype:TType = new TType
debuglog "sint"
debuglog sint
i1(sint)
debuglog sint
i2(sint)
debuglog sint
debuglog "stype"
debuglog stype.test
t1(stype)
debuglog stype.test
t2(stype)
debuglog stype.test
function i1(i%)
i = 2
end function
function i2(i% var)
i = 3
end function
function t1(t:ttype)
t.test = 2
end function
function t2(t:ttype var)
t = new ttype 'вот тут мы подмениваем именно указатель !
t.test = 3
end function
в итоге в дебаге должны получить
потому что int копируется в новое значение
а stype это и так указатель
так же мои мысли потверждаются кодом : (файл blitz_object.h)
#ifndef BLITZ_OBJECT_H
#define BLITZ_OBJECT_H
#include "blitz_types.h"
#ifdef __cplusplus
extern "C"{
#endif
#define BBNULL (&bbNullObject)
struct BBClass{
//extends BBGCPool
BBClass* super;
void (*free)( BBObject *o );
BBDebugScope*debug_scope;
int instance_size;
void (*ctor)( BBObject *o );
void (*dtor)( BBObject *o );
BBString* (*ToString)( BBObject *x );
int (*Compare)( BBObject *x,BBObject *y );
BBObject* (*SendMessage)( BBObject *m,BBObject *s );
void (*_reserved1_)();
void (*_reserved2_)();
void (*_reserved3_)();
void* vfns[32];
};
struct BBObject{
//extends BBGCMem
BBClass* clas;
int refs;
};
extern BBClass bbObjectClass;
extern BBObject bbNullObject;
BBObject* bbObjectNew( BBClass *t );
void bbObjectFree( BBObject *o );
void bbObjectCtor( BBObject *o );
void bbObjectDtor( BBObject *o );
BBString* bbObjectToString( BBObject *o );
int bbObjectCompare( BBObject *x,BBObject *y );
BBObject* bbObjectSendMessage( BBObject *m,BBObject *s );
void bbObjectReserved();
BBObject* bbObjectDowncast( BBObject *o,BBClass *t );
void bbObjectRetain( BBObject *o );
void bbObjectRelease( BBObject *o );
void bbObjectRegisterType( BBClass *clas );
BBClass** bbObjectRegisteredTypes( int *count );
#ifdef __cplusplus
}
#endif
#endif
все функции работают не с обьектами, а с указателями на них
что собственно и логично
можно конечно получать указатель на переменную,
но я написал на blitzmaxе больше 700 кб кода и мне редко когда такое нужно было
drunnik
в итоге в список не получится поместить обьект Object
полностью, как я понимаю
добавляя Object в список ты и так добавляешь туда его ссылку
если тебе нужны простые указатели типа Int
пользуйся командами : HandleFromObject и прочими
Последний раз редактировалось jimon, 08.05.2008 в 11:27.
|
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:28.
|