把下面的C代码转成DELPHI:
BYTE v_Pic[435640];
BYTE *v_PtrPic;
v_PtrPic=&v_Pic[40];
BYTE m_Pic[440*330];
BYTE *m_PtrPic;
m_PtrPic=&m_Pic[0]; for(int yy=0;yy<330;yy++)
for(int xx=0;xx<440;xx++)
*(m_PtrPic+yy*440+xx)=*(v_PtrPic+((329-yy)*440+xx)*3);DELPHI:
v_Pic: array[0..435639] of BYTE;
v_PtrPic : ^BYTE;
m_Pic:[0..440*330-1] of BYTE;
m_PtrPic : ^BYTE;
v_PtrPic:=@v_Pic[40];
m_PtrPic:=@m_Pic[0];
for yy:=0 to 329 do
for xx:=0 to 439 do
(m_PtrPic+yy*440+xx)^:=(v_PtrPic+((329-yy)*440+xx)*3)^; //出错在DELPHI中指针不能进行加减运算,不如C中灵活,难道只能像下面这种实现:
m_Pic[yy*Video_Width+xx]:=v_Pic[((Video_Height-1-yy)*Video_Width+xx)*3+40];
指针的效率是否要高些?
BYTE v_Pic[435640];
BYTE *v_PtrPic;
v_PtrPic=&v_Pic[40];
BYTE m_Pic[440*330];
BYTE *m_PtrPic;
m_PtrPic=&m_Pic[0]; for(int yy=0;yy<330;yy++)
for(int xx=0;xx<440;xx++)
*(m_PtrPic+yy*440+xx)=*(v_PtrPic+((329-yy)*440+xx)*3);DELPHI:
v_Pic: array[0..435639] of BYTE;
v_PtrPic : ^BYTE;
m_Pic:[0..440*330-1] of BYTE;
m_PtrPic : ^BYTE;
v_PtrPic:=@v_Pic[40];
m_PtrPic:=@m_Pic[0];
for yy:=0 to 329 do
for xx:=0 to 439 do
(m_PtrPic+yy*440+xx)^:=(v_PtrPic+((329-yy)*440+xx)*3)^; //出错在DELPHI中指针不能进行加减运算,不如C中灵活,难道只能像下面这种实现:
m_Pic[yy*Video_Width+xx]:=v_Pic[((Video_Height-1-yy)*Video_Width+xx)*3+40];
指针的效率是否要高些?
解决方案 »
- 听说Case能优化,它具体是怎么优化滴?
- Test
- DELPHI不能启动了(等急!!!)
- 如何从一文本文件中提出一段到一个字符串或stringlist中
- 求键盘每个键对应的数值?
- 如何实现在工具栏右下角弹出消息提示的效果
- 在QuickRep中如何指定显示的小数字段的位数?
- 请问怎么样断开网上邻居里别人和你的所有连接?
- 关于userdat.dat文件的读取?
- 急、急_我在进行数据备份时用了"BatchMove"控件,数据可以备份,但是如果数据达到万条以上,系统就像死机一样,很慢。我想知道怎样能够截获"BatchMove"复制数据的状态。
- excel模板问题:怎么老是新增一个sheet????
- 批量导入ORACLE数据。急!在线等
inc(v_PtrPic,(329-yy)*440+xx)*3) ;
m_PtrPic^ := v_PtrPic ;
var
a : array [1..20] of Char;
ptr : PChar; //PChar 可以看作 ^Char
begin
ptr := @a;
Inc(ptr); // 这句等价于 C 的 ptr++;
Inc(ptr, 2); //这句等价于 C 的 ptr+=2;
end;到底这里得a是等于a[0] 还是@a[0]?
为什么ptr := @a;还要加个取址@?
试了一下去掉取祉是不能编译通过的。到底这里的a和c语言里的a有什么区别呢?
ptr 是指针,a 是数组,直接给值就可以了
ptr := a;
在c里a代表首地址,而在delphi里不是。
a:Array [0..4] of integer;
ptr:Pchar;
b,i:Integer;
begin
for i := 0 to 4 do
a[i] := i;
ptr := @a;
inc(ptr,sizeof(integer));
b := Integer(ptr^);
showmessage(inttostr(b));
简单例子