CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

我想使用pointer实现两个数组相加放到一个新数组中,怎么出错!??

楼主jixiaoqiang(探索者)2006-03-01 10:58:20 在 Delphi / 语言基础/算法/系统设计 提问

var  
      a:Array   of   Byte;  
      b:Array   of   Byte;  
      c:Array   of   Byte;  
      i:Integer;  
      p:PChar;  
  begin  
      setLength(a,10);  
      setLength(b,10);  
      setLength(c,20);  
      ZeroMemory(a,10);  
      ZeroMemory(b,10);  
      ZeroMemory(c,20);  
      p:=@c;  
      for   i:=0   to   9   do  
      begin  
          a[i]:=52;  
          b[i]:=53;  
      end;  
      ShowMessage(PChar(a));  
      ShowMessage(PChar(b));  
      CopyMemory(p,@a,10);  
      ShowMessage(PChar(c));  
      inc(p,10);  
      CopyMemory(p,@b,10);             //???   怎么出错!!??  
  end; 问题点数:25、回复次数:6Top

1 楼bluekitty(软件黑领)回复于 2006-03-01 11:28:15 得分 0

CopyMemory(p,@x,10)改成CopyMemory(p,@x,10*sizeof(integer))Top

2 楼bluekitty(软件黑领)回复于 2006-03-01 11:32:46 得分 0

...,看错了,abc我看成integer数组了Top

3 楼jixiaoqiang(探索者)回复于 2006-03-01 11:40:09 得分 0

现在又发现一个问题,真是奇怪!!  
  var  
      b:Array   of   Byte;  
      c:Array   of   Byte;  
      i:Integer;  
      p:PChar;  
  begin  
      setLength(b,10);  
      setLength(c,20);  
      ZeroMemory(b,10);  
      ZeroMemory(c,20);  
      p:=@c;  
      for   i:=0   to   8   do  
      begin  
          b[i]:=48   +   i;  
      end;  
      ShowMessage(PChar(c));  
      CopyMemory(p,@b,1*sizeof(byte));     //copy1个字节,为什么内容都复制过去了??  
      ShowMessage(PChar(c));  
  end;Top

4 楼ZyxIp(绝望中...)回复于 2006-03-01 12:06:04 得分 0

a:Array   of   Byte;定义一个动态数组,a   就是一个指针  
      ZeroMemory(a,10);第一个参数要pointer   你这样写是正确的.  
   
      CopyMemory(p,@a,10);这里也是要pointer你为什么写@a这成了指针的指针.  
      这里应写成CopyMemory(p,a,10);  
   
      留言的时候为什么有时删除就,Ctrl_C这些都失效了?Top

5 楼ZyxIp(绝望中...)回复于 2006-03-01 12:09:00 得分 25

正确的写法  
  var  
      a:Array   of   Byte;  
      b:Array   of   Byte;  
      c:Array   of   Byte;  
      i:Integer;  
      p:pointer;  
  begin  
      setLength(a,10);  
      setLength(b,10);  
      setLength(c,20);  
      ZeroMemory(a,10);  
      ZeroMemory(b,10);  
      ZeroMemory(c,20);  
      p:=c;  
      for   i:=0   to   9   do  
      begin  
          a[i]:=52;  
          b[i]:=53;  
      end;  
      ShowMessage(PChar(a));  
      ShowMessage(PChar(b));  
      CopyMemory(p,a,10);  
      ShowMessage(PChar(c));  
      p:=Pointer(Integer(p)+10);  
      CopyMemory(p,b,10);              
      ShowMessage(PChar(c));  
      a:=Nil;  
      b:=Nil;  
      c:=Nil;  
  end;Top

6 楼jixiaoqiang(探索者)回复于 2006-03-01 14:21:09 得分 0

//p:=@c     你会死的很难看,copyMemory的时候,即使限定长度,会把整个内容都给复制进去,还误以为是copymemory函数的问题呢!!  
                      //正是似懂非懂害死人呀..别人写的用@的是因为他是string类型的,而这里的c本身就代表数组的首指针.  
                      //如果p:=@c,会把c的指针对应的内存地址赋给p,这样p就不是指向c的指针了.Top

相关问题

  • 数组可以相加吗
  • 为数组赋值出错!
  • 如何快速相加数组?
  • 两个byte数组如何相加???
  • 多维数组赋值出错
  • 简单任务:数组定义出错?
  • 请教个菜鸟问题:数组相加
  • ASP数组元素相加问题——在线等
  • 问个很菜的问题,一维数组间如何相加
  • 为何设数组长度时出错呢??快来拣分

关键词

  • 指针
  • 数组
  • zeromemory
  • setlength
  • copymemory
  • pchar
  • showmessage
  • pointer
  • integer
  • arrayof byte

得分解答快速导航

  • 帖主:jixiaoqiang
  • ZyxIp

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo