![]() |
|
#1
|
||||
|
||||
![]() Код:
var Form1: TForm1; p:pointer; p1,p2:pointer; Str:String; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Str:='666'; p1:=pointer(Str); p2:=@pointer(Str); Чем отличается содержимое p1 и p2 ? Skype: Lotles-XXXX ![]() Последний раз редактировалось Lotles, 13.10.2009 в 17:26. |
#2
|
||||
|
||||
![]() Что никто не знает?
Skype: Lotles-XXXX ![]() |
#3
|
||||
|
||||
![]() Я знаю, оба указателя, оба бессмысленные.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
||||
|
||||
![]() Цитата:
var Код:
Form1: TForm1; S:String; p2:pointer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin S:='Test'; p2:=pointer(S); end; end. Скажите что находится в p2 ??? Skype: Lotles-XXXX ![]() |
#5
|
||||
|
||||
![]() Странный ты, видимо читать не любишь.
В дельфи строка тупо указатель, первые четые байта - смещение, потом данные #0 оканчивающиеся. А интерпритатор делает их удобными тебе (строки). Так вот в p2 у тебя указатель на указатель на строку, т.е. бессмысленный А вот если ты сделаешь: Код:
p2:=@s[1]; Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#6
|
||||
|
||||
![]() Спасибо за подробное изложение
но p2:=pointer(S) - это указатель на указатель на строку как вы сказали, а указатель в моем понимании это адрес, поэтому я запутался, когда вспомнил про p1:=@S , так и не пойму, чем отличается их содержимое ??? Skype: Lotles-XXXX ![]() Последний раз редактировалось Lotles, 18.10.2009 в 18:42. |
#7
|
||||
|
||||
![]() Цитата:
Код:
p1 := @S; Код:
p2 := pointer(S); если нужно конкретное решение, высказывай проблему - подскажем TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#8
|
||||
|
||||
![]() Цитата:
Код:
var Form1: TForm1; Str:String; p1:pointer; p2:pointer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Str:='text'; p1:=@Str; p2:=pointer(Str); if p1=p2 then ShowMessage ('p1 и p2 ничем не отличаются');//это сообщение не высвечив-ся end; end. Тогда здесь почему так ? Skype: Lotles-XXXX ![]() |
#9
|
||||
|
||||
![]() Код:
@Str[1] или Pointer(Str) или PChar(Str) Код:
@Str TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; Последний раз редактировалось AleD, 20.10.2009 в 07:04. |
#10
|
||||
|
||||
![]() Aled, Спасибо !!! Я насчет этой темы вроде тупой но иногда полезной долго мучился что только не на придумывывал вы бы знали.
Skype: Lotles-XXXX ![]() Последний раз редактировалось Lotles, 23.10.2009 в 19:06. |
#11
|
||||
|
||||
![]() Цитата:
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#12
|
|||
|
|||
![]() Доброго всем времени суток, как говорится.
Столкнулся с элементарной проблемой: не могу проверить равна ли ссылка (pointer) ничему. Пишу так: Код:
var SelectObject : ^TGLBaseSceneObject; ... if (SelectObject<>nil) then BEGIN Position_X_Edit.Text:=(CurrToStr(SelectObject^.Position.X)); Position_Y_Edit.Text:=(CurrToStr(SelectObject^.Position.Y)); Position_Z_Edit.Text:=(CurrToStr(SelectObject^.Position.Z)); Rotation_Pich_Edit.Text:=(CurrToStr(SelectObject^.PitchAngle)); Rotation_Roll_Edit.Text:=(CurrToStr(SelectObject^.RollAngle)); Rotation_Turn_Edit.Text:=(CurrToStr(SelectObject^.TurnAngle)); END Делаем'c разные игры. Искать на glscene.ru |
#13
|
||||
|
||||
![]() А что, собственно, не так? Условие никогда не выполняется? Посмотри в сторону где присваивается SelectObject.
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; Последний раз редактировалось AleD, 31.01.2010 в 11:21. |
#14
|
|||
|
|||
![]() Доброго времени суток, товарищи. Есть процедура получения размера ресурса и указателя на данные ресурса. Но перед тем как выдать указатель из процедуры, данные по его адресу нужно обратотать функцией "Function Decode(DInPut: Byte): Byte;" тип передаваемого и получаемого пареметров функции изменить не возможно. Тип данных по адресу "ResPtr" не известен.
Код:
... Type TByteArray = Array Of Byte; Procedure LoadDataFromRes(TheData: String; Var DataSize: LongWord; Var DataPtr: Pointer); Var ResHandle : THandle; MemHandle : THandle; ResPtr : Pointer; Buffer : TByteArray; Count : LongWord; Begin DataPtr := NIL; DataSize := 0; ResHandle := FindResource(hInstance, PChar(TheData), 'DATA'); MemHandle := LoadResource(hInstance, ResHandle); DataSize := SizeOfResource(hInstance, ResHandle); ResPtr := LockResource(MemHandle); IF (ResPtr = NIL) OR (DataSize = 0) Then Exit; SetLength(Buffer, DataSize); Move(ResPtr, Buffer, DataSize); For Count := 0 To DataSize-1 Do Begin Buffer[Count] := Decode(Buffer[Сount]); End; Move(Buffer, DataPtr, DataSize); FreeResource(ResHandle); End; И ещё один вопрос, как из области памяти получить/присвоить значение определенного байта, имея лишь указатель на область и зная ее размер, без использвания массивов? |
#15
|
||||
|
||||
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |