
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 52 53 [54] 55 56 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#796
,
|
|
|
Цитата Бобёр @ там есть pointer, но я не уверен, что его можно к любому другому указателю привести. можно ещё массив void* затолкнуть (или как бишь оно в дельфях зовётся то.. LPVOID или как то так?..) |
![]() |
Сообщ.
#797
,
|
|
Цитата Allexx @ там есть pointer, но я не уверен, что его можно к любому другому указателю привести. хе. в дельфе всё мона ко всему привести. Если есть желание... |
Сообщ.
#798
,
|
|
|
Цитата array of const, а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?.. Цитата хе. в дельфе всё мона ко всему привести. Если есть желание... ![]() в сях то тоже, reinterpret_cast ещё никто не отменял, но лучше его использовать очень-очень-очень острожно. |
Сообщ.
#799
,
|
|
|
Цитата jack128 @ Ну.. интереса ради, а так можно:хе. в дельфе всё мона ко всему привести. Если есть желание... int a ((char*)&a)[1]=1; |
Сообщ.
#800
,
|
|
|
Цитата Бобёр @ а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?.. В чем проблема? Передается ведь адрес! Но в отличие от указателя, тип каждого такого параметра можно узнать во время исполнения. |
![]() |
Сообщ.
#801
,
|
|
Цитата Бобёр @ а что, если у тебя пятый парамет строка, а десятый - число?.. как они уживутся в одном массиве?.. легко и непренужденно. фактически компилятор создает массив структур, аналогичных com'овскому Variant'у и передаёт их в процедуру.. Цитата Allexx @ int a ((char*)&a)[1]=1; Если я правельно понял ты во втротой байт int'а единицу записал? Ну если дословно переводить, то так: ![]() ![]() var a: Integer; begin PChar(@a)[1] := chr(1); end; но более наглядно: ![]() ![]() type // этот тип объявлен в одном из стандартных модудей дельфи LongRec = packed record case Integer of 0: (Lo, Hi: Word); 1: (Words: array [0..1] of Word); 2: (Bytes: array [0..3] of Byte); end; var a: Integer; begin LongRec(a).Bytes[1] := 1; end; |
Сообщ.
#802
,
|
|
|
jack128 ну.. 2й метод -- явная проктология. А насчёт первого, если PChar, естественный тип (не класс), то я смотрю, у вас не так всё запущено
![]() |
![]() |
Сообщ.
#803
,
|
|
Цитата Allexx @ 2й метод -- явная проктология. Это еще почему??? Цитата Allexx @ А насчёт первого, если PChar, естественный тип (не класс), Ну в данном случае именно Pchar - обарабатывается особым образом. но я могу использывать любой другой тип-указатель на массив, например ![]() ![]() type PByteArray = ^TByteArray; TByteArray = array[0..MaxInt-1] of byte; PByteArray(@a)[1] := 1; |
Сообщ.
#804
,
|
|
|
Цитата Alex Forth @ нет. writeln формально(по стандарту паскаля) является процедурой, но на деле это что-то вроде оператора языка.Так значит в Паскале можно хотябы обьявить процедуру с переменным числом параметров? нетипизированный объект - это такая специфическая, тормозная и потенциально глючная штука. Внутри это структура, содержащая два поля - тип объекта(байт) и собственно значение(4 байта). Соответсвенно, все, что больше 4 байт(например, число с плавающей точкой двойной точности, в терминологии C - double), хранится в виде указателя. В паскале это проходит - там все объекты создаются в куче. Естественно, ни о какой производиетльности при таком подходе говорить не приходится. |
Сообщ.
#805
,
|
|
|
Цитата trainer @ по стандарту паскаля где можно почитать? |
Сообщ.
#806
,
|
|
|
Цитата daevaorn @ поищи сам. Их два:где можно почитать? ISO 7185:1990 Pascal ISO 10206:1990 Extended Pascal |
Сообщ.
#807
,
|
|
|
Цитата Бобёр сам то ты можешь создать процедуру с переменным числом параметров? Цитата Alex Forth На паскале не могу. Ну не моги и дальше ![]() ![]() ![]() program Hello; procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll'; procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll'; const n = #$A#$D; begin printf ('Hello, wtf?'+n); printf ('The hex code is: %x '+n, $12345678); end. Цитата trainer Естественно, ни о какой производиетльности при таком подходе говорить не приходится. О да, особенно с таким неоптимизирующим компилятором! ![]() ![]() mov eax,000401628 call .000401570 push 00040208C call printf ;msvcrt pop ecx push 012345678 push 00040209C call printf ;msvcrt add esp,008 call .0004012CC IntelC++ наверно лучше бы оформил? |
Сообщ.
#808
,
|
|
|
Цитата аналогичных com'овскому Variant' а, ну ещё наверное можно использовать ещё сам VARIANT |
Сообщ.
#809
,
|
|
|
Цитата N0P @ Цитата Бобёр сам то ты можешь создать процедуру с переменным числом параметров? Цитата Alex Forth На паскале не могу. Ну не моги и дальше ![]() ![]() ![]() program Hello; procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll'; procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll'; const n = #$A#$D; begin printf ('Hello, wtf?'+n); printf ('The hex code is: %x '+n, $12345678); end. А ты "создание процедуры" не попутал с "вызовом процедуры" ? |
Сообщ.
#810
,
|
|
|
Цитата N0P @ ![]() ![]() program Hello; procedure printf (str:pchar);overload;cdecl; external 'msvcrt.dll'; procedure printf (str:pchar;val:integer);overload;cdecl; external 'msvcrt.dll'; const n = #$A#$D; begin printf ('Hello, wtf?'+n); printf ('The hex code is: %x '+n, $12345678); end. А могу я на этих декларациях сделать третий вызов ![]() ![]() printf('a=%u, b=%g, c=%p', a,b,c); ![]() |