首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

结构体指针有关问题,希望高人解答

2012-02-17 
结构体指针问题,希望高人解答我定义了一个这样的结构体TMonPoint recordmonid: PDWORDmonindex: PDWORD

结构体指针问题,希望高人解答
我定义了一个这样的结构体

 TMonPoint = record 
  monid: PDWORD;
  monindex: PDWORD;
  monname: PAnsiChar;
  monzuobiaoX: PSingle;
  monzuobiaoY: PSingle;
  end;
  PTMonPoint = ^TMonPoint;

在new创建时设置了每个参数的指向地址

为何在使用过程中获得指针指向的值不能实时更新呢?

举个例子:
var
  MonPoint: PTMonPoint;
begin
  New(MonPoint);
  MonPoint.monid := $123456; //随便造的,实际是有的正确地址
  MonPoint.monindex := $234567;
  MonPoint.monname := PAnsiChar($131000);
  MonPoint.monzuobiaoX := PSingle($148000);
  MonPoint.monzuobiaoY := PSingle($150000);
  //然后将其添加进TLIST里面
  //使用时取出来,以上地址的值都是会动态变化的
  我要问的是这明明是指针,为何我从TLIST里面取出来的结构体指针里的每一项指针指向的值不能实时更新呢?



[解决办法]
你确定你给他们分配内存了吗?
[解决办法]
TMonPoint的5个属性也都是指针.这些指针是你自己申请的还是像你的举例一样PAnsiChar($131000),通过PAnsiChar取的指针只是相对PAnsiChar的参数而言

一般情况下不建议用指针作属性,因为这样虽然节省了存储空间,但是用起来要麻烦得多,如果你实在有需要的话可以这样

var
MonPoint: PTMonPoint;
begin
New(MonPoint);
//安全判断省略了..
New(MonPoint.monname);
CopyMemory(MonPoint.monname, ..., nSize{大小,自己定义});

[解决办法]
你的TList里面是存储的是一个指针的值是指针常量,不是变量,所以不会跟着改变,其实你直接访问那个record的指针就好了,没必要放到TList里面去

热点排行